javascript正则表达式(5)

您所在的位置:网站首页 js中的exec javascript正则表达式(5)

javascript正则表达式(5)

#javascript正则表达式(5)| 来源: 网络整理| 查看: 265

RegExp.prototype.test(str)//参数就是一个字符串

1.用于测试字符串参数中是否存在匹配正则表达式模式的字符串

2.存在就返回true,否则返回false

 

这里有一个特殊现象

 

当reg使用了对象属性/g,为什么第三遍test的时候会出现false?而第四遍又成了true?实际上是lastIndex这个属性在作怪,这里我们回顾一下lastIndex属性:

lastIndex 是当前表达式匹配内容的最后一个字符的下一个位置。

 

结果显示1 2

我们分析一下

表达式匹配内容:就是第一遍匹配的结果\w,就是字母a。

最后一个字符:因为就一个字符,最后一个还是它本身。

下一个位置:第一个下标默认为0,下一个就是0+1=1。

那么,第二次匹配到了b字符,b的下一个字符也就是当前下标加上1,等于2.因为下一个字符为空,没有最后一个字符(没有匹配的字符本身),所以退出循环(此时lastIndex重置为0,这也就解释了上面说的,为什么第三遍的结果是false,因为没有下一个位置。第四遍重置回0后,结果又成了trues,得出结论:全局属性,可以累加和重置,在非全局下,lastIndex根本就不生效),

最终结果显示1,2

如果,我们不光想知道lastIndex,我们还想知道它从第几个开始匹配的?它现在匹配的是谁?应该怎么办?那就要用下面的方法了:

RegExp.prototype.exec(str)

 

1.使用正则表达式模式对字符串执行搜索,并将更新全局RegExp对象的属性以反映匹配结果(其实就是lastIndex所反映的结果)

2.如果没有匹配的文本则返回null,否则返回一个结果数组:

1)index 声明匹配文本的第一个字符的位置

2)input 存放被检索的字符串string

 

非全局调用

1.调用非全局的RegExp对象的exec()时,返回数组

2.第一个元素与正则表达式相匹配的文本

3.第二个元素是与RegExpObject的第一个子表达式相匹配的文本(如果有的话)

4.第三个元素是与RegExpObject的第二个子表达式相匹配的文本(如果有的话),以此类推。

请看例子:

 

第一个0:在非全局下,lastIndex根本不生效,所以为0

第二个0:有实际含义,因为第一个字符下标为0,如果把

ts='1a2b3c4d5e'改为ts='$1a2b3c4d5e',则第二个0变为1.

1a2:当前匹配的内容

a:第一个分组内容

匹配的总数在结果数组中显示,结果数组为ret。下图为第一次进行匹配的信息

 

当调用了全局属性:



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3