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

正则表达式之位置匹配

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

Sharplook夏洛克作为专业的日志采集分析系统,涉及的技术点,从后到前着实不少,内容也较为复杂。正则作为日志解析的手段,起着举足轻重的作用,在此小生将晦涩难懂的内容,拆解出来以便学习之用。

往期回顾

在上一篇文章中,我们已经学习了正则表达式的字符匹配,介绍了模糊匹配、字符组和量词。正则表达式就是匹配模式,要么匹配字符,要么匹配位置,牢记这个基准。本章小生将介绍位置匹配,将分成以下内容进行介绍:

  • 位置的定义
  • 位置如何匹配
  • 位置的特性

位置的定义

位置可以理解为字符之间的位置,也可以称为锚点。如图,箭头所指的位置:

如何匹配位置

在ES5中,共有6个锚:^$bB(?=p)(?!p)

^$bB(?=a)(?!b) 其可视化的形式如下:其可视化的形式如下:

^$

^(脱字符)匹配开头的位置,在多行匹配中匹配行开头。

$(美元符)匹配结尾的位置,在多行匹配中匹配行结尾。

比如我们把字符串的开头和结尾替换为#,就是将位置替换为字符:

let result = 'lemon'.replace(/^|$/g,'#');
console.log(result);
// => #lemon#

多行匹配模式(增加修饰符 m)时,此是行的概念,这一点需要我们注意:

let result = 'Inlovenjavascript'.replace(/$|^/gm,'#');
console.log(result);
/*
#I#
#love#
#javascript#
*/

bB

b 是单词边界符,具体为wW之间的位置,也包括w^之间的位置,和w$之间的位置。

比如,我们通过字符串替换字符串中的b位置为#来进行分析:

let result = '[JS] Lesson_01.mp4'.replace(/b/g,'#');
console.log(result);
// => [#JS#] #Lesson_01#.#mp4#

具体怎么匹配成这样的? 接下来我们慢慢来分析。

首先我们需要知道,w 是字符组 [a-zA-Z0-9_]的简写,也就是w是字母、数字和下划线中的任何一个。而 W 是排除字符组 [^a-zA-Z0-9_]的简写形式,即Ww以外的任何一个字符。

我们再来看我们的结果[#JS#] #Lesson_01#.#mp4#中的每一个#的由来:

  • 第一个,两边字符是 [J,是 Ww 之间的位置。
  • 第二个,两边字符是 S],是 wW 之间的位置。
  • 第三个,两边字符是空格与 L,是 W w 之间的位置。
  • 第四个,两边字符是 1.,是 wW 之间的位置。
  • 第五个,两边字符是 .m,是 Ww之间的位置。
  • 第六个,位于结尾,前面的字符 4w,即 w$ 之间的位置。

知道了 b 的概念之后,接下来 B 就很好理解了。B 就是 b 的反面意思,非单词边界,例如上例子中除去 b 的位置之外,余下的就都是 B 的位置了。具体来说就是 wwWW^WW$ 之间的位置。

比如,上例子中,把所有 B 替换成 #:

let result = '[JS] Lesson_01.mp4'.replace(/B/g,'#');
console.log(result);
// => #[J#S]# L[/!--empirenews.page--]s#s#o#n#_#0#1.m                        

(编辑:李大同)

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

推荐文章
    热点阅读