正则表达式学习---基础符号(二)

知识:

? :匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。

| :类似或语句,指明两项之间的一个选择

[] :匹配方括号里面的其中一个字符

\b :匹配一个单词边界,即字与空格间的位置。 

示例:(在该网站下调试https://regex101.com/?tdsourcetag=s_pctim_aiomsg

var reg1 = /-?\d{2}\.\d{3}/;   reg1.exec("11.356");  匹配结果是:11.356

var reg2 = /-?\d{2}\.\d{3}/;   reg2.exec("-11.356");  匹配结果是:-11.356

var reg3 = /[36]/;   reg3.exec("123456");  匹配结果是:36

var reg4= /\bhe\b/;   reg4.exec("he adadhe heasd aedhealsjko");  匹配结果是:he(PS:是第一个he)

问题1:

我们可以看出来,在*和+两个不同的符号下,查询的结果一样,但是匹配的次数完全不同,*匹配了18次,+匹配了5次 ,那么*是匹配前面零次或多次和+匹配前面表达式至少一次到底什么区别呢?首先弄清楚  位置  这个概念,刚开始理解会认为第一张图里面4568中4是索引0或者是位置1,其实稍微有点偏差,4前面的才是0位置,紧接着4后面5前面(4和5之间)的就是第一位置因为*匹配零次,所以任何位置都会匹配一次,于是匹配方式便是匹配0位置,然后发现0位置后面是4匹配成功接着匹配1位置,此时4是位置(pos:0-1);1位置后面是5(pos:1-2)匹配失败但是会去匹配第一个位置然后接着进行匹配2位置···,最后我们算下匹配的位置(13)以及匹配到的数字数量(5)恰好18次,所以匹配流程大致如此。对于+,它是要至少出现一次,所以只有出现需要匹配的数据的位置才会去匹配(他就不会去匹配位置了),所以只有5次。如匹配第0位置是4匹配成功,匹配第1位置是5匹配失败···

问题2:

在reg4里面,为什么只能匹配到第一个he呢?在理解了位置的概念下,看\b,它说单词边界,但却很模糊。看reg4,开始的\b匹配每一个字符的边界位置

 然后\bhe那就匹配单词he前面有边界位置的(简单来说就是单词he是开头的),于是匹配到两个

 最后\bhe\b那么就是匹配单词he开头且结尾的,自然就只有第一个he了。

猜你喜欢

转载自blog.csdn.net/qq_40258437/article/details/87088279
今日推荐