Javascript首次使用正则测试()是true,第二次是false。

Javascript首次使用正则测试()是true,第二次是false。
1。前言

今天,我的朋友问了我一个问题。现在我需要多次匹配相同的内容,但是为什么我第一次匹配true,而第二个匹配是错误的呢
VaR S1 =MRLP ;
VaR S2 =MRLP ;
VaR reg = / / IG MRLP;
console.log(reg.test(S1));
console.log(reg.test(S2));
这时,您会发现,当我们使用其他正则字符串的正则匹配字符串时,第一个匹配是true,第二个匹配是false。

等等,为什么我的比赛,我还特别加入MRLP,我不区分大小写,为什么它可以被匹配的第一次,第二次不

这就是我要告诉你,今天在JS约lastIndex。

2。lastIndex

在开始解释之前,首先简要回顾一下正则表达式在JS中使用的方式。

在js中使用正则表达式有两种方法:

第一种是正则表达式对象的方法,有两种常用的方法。

检索字符串中指定的值。返回找到的值并确定其位置。
测试(STR):检索字符串中指定的值。返回true或false

第二个是String对象的方法,有四种常用的方法。

匹配(正则表达式):找到一个或多个正则表达式匹配
取代(正则表达式):替换与正则表达式匹配的子串
搜索(正则表达式):检索值的正则表达式匹配
拆分(搜索):将字符串拆分为字符串数组。

什么方法都与lastIndex我们今天说的吗

的lastIndex属性用于指定下一场比赛的开始位置。

最后比赛的结果是由法RegExp.exec发现()和()regexp.test。他们占据了所有的位置被lastIndex属性为出发点下检索。

这样,字符串中所有匹配的文本都可以通过反复调用这两种方法来遍历。

需要注意的是,这个属性只能通过设置标志G来使用。

既然你知道了这件事的原因,解决起来就很简单了。

三.解决方案

3.1第一解

正如上面提到的,我们的lastIndex属性必须设置为使用G标签。

因此,当我们匹配时,我们可以根据情况直接删除g标签。
VaR S1 =MRLP ;
VaR S2 =MRLP ;
VaR reg = / /我MRLP;
console.log(reg.test(S1) / /真实);
console.log(reg.test(S2) / /真实);
3.2第二解

很多时候,我们必须执行全局匹配(G),我们不能在第一时间使用第一个匹配。

事实上,我们的lastIndex属性是可读可写。

只要目标字符串的下一次搜索开始,就可以设置它。

当方法exec()或测试()不再能找到匹配的文本,他们自动复位的lastIndex属性0。

这样,当我们再次执行全局匹配时,就不会出现错误的情况。
VaR S1 =3206064928:MRLP:3206064928;
VaR S2 =MRLP ;
VaR reg = / / IG MRLP;
console.log(reg.test(S1) / /真实);
console.log(Reg。lastIndex); / / reg.lastindex = 15
reg.lastindex = 0; / /我将被重置为0 lastIndex
console.log(reg.test(S2) / /真实);
谢谢你的阅读。我希望你能帮助你,谢谢你对这个站的支持。

tag:正则首次测试电脑软件Javascript

相关内容