1 回答

TA贡献1853条经验 获得超9个赞
全局匹配影响的
lastIndex:下一个匹配的索引值。(这个属性只有在使用g参数时可用)
在全局匹配下,匹配成功后正则表达式的lastIndex会增加,若开始为0,如果上一次匹配成功了。lastIndex就会变为1,而进行一下个字母比较就是从位置1开始比较的,你第二个为配,只有一个,lastIndex为0的话可以匹配,但是为1,找配后面的字符串找不到,所以匹配失败,失败后lastIndex变为0,下次从0开始搜索,中匹配成功....
var arr2 = ["匹","配","中","文"];
var pattern1 = /[\u4e00-\u9fa5]+/g;
for (var i = 0; i < arr2.length; i++) {
console.log(pattern1.lastIndex) //0 1 0 1
if (pattern1.test(arr2[i])) {
console.log(arr2[i]); // 匹,中
}
}
由上可知,若想显示,lastIndex是逐渐增加的,类似于下面的才能显示出来
var arr2 = ["匹","配配","中中中","文文文文"];
所以应该去掉/g,或者循环时将lastIndex重置为0
var pattern1 = /[\u4e00-\u9fa5]+/g;
for (var i = 0; i < arr2.length; i++) {
pattern1.lastIndex=0;
if (pattern1.test(arr2[i])) {
console.log(arr2[i]);
}
}
添加回答
举报