加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式之位置匹配

发布时间:2020-12-14 06:40:41 所属栏目:百科 来源:网络整理
导读:Sharplook夏洛克作为专业的日志采集分析系统,涉及的技术点,从后到前着实不少,内容也较为复杂。正则作为日志解析的手段,起着举足轻重的作用,在此小生将晦涩难懂的内容,拆解出来以便学习之用。 往期回顾 在上一篇文章中,我们已经学习了正则表达式的字符
m#o#n#

二者的学名分别是positive lookahead 和 negative lookahead。中文意思分别为正向先行断言和负向先行断言。ES5之后的版本,会支持positive lookbehind 和 negative lookbehind。意思是正向后行断言和负向后行断言。具体是(?<=p)(?<!p)。例如:

let result = 'lemon'.replace(/(?<=l)/g,'#');
console.log(result);
// => l#emon

表示该位置之前的字符要匹配 l 表达式。而 (?<!p) 为:

let result = 'lemon'.replace(/(?<=l)/g,'#');
console.log(result);
// => #le#m#o#n#

表示该位置之前的字符不能匹配 l

其实 (?=p)^ 一样好理解,将其理解成 p 前面的那个位置即可,其他类似。

位置的特性

对于位置的理解,我们可以将其理解成空字符 ""。 比如lemon 字符串可以写成如下的形式:

'lemon' === '' + 'l' + 'e' + 'm' + 'o' + 'n'+ '';

也可以写成如下:

'lemon' === '' + 'lemon' + '';

因此,把 ^lemon$ 写成 ^^lemon$$$,是没有任何问题的:

let result = /^^lemon$$/.test('lemon');
console.log(result);
// => true

甚至可以写成更复杂的:

let result = /(?=le)^^le(?=w)mon$bb$/.test('lemon');
console.log(result);
// => true

也就是说字符之间的位置,可以写成多个。

把位置理解成空字符,是对位置非常有效的理解方式。

小结

本节介绍了位置的匹配,需要诸君理解 ^$bB(?=p)(?!p)(?<=p)(?<!p)中的位置匹配的用法。

本文中的正则表达式转化为关系图来展示的工具是Regexper

此文主要参考和学习了老姚的《JavaScript 正则表达式迷你书》,内容清晰明了,在此非常感谢老姚的 free精神,致敬。

参考文献

[1] 老姚 著《JavaScript 正则表达式迷你书》

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读