// 用正则匹配中文
var arr2 = ["匹","配","中","文"];
var pattern1 = /[\u4e00-\u9fa5]+/g;
for (var i = 0; i < arr2.length; i++) {
if (pattern1.test(arr2[i])) {
console.log(arr2[i]); // 匹,中
}
}
上面的代码为何只输出了 匹、中?
// 用正则匹配中文
var arr2 = ["匹","配","中","文"];
var pattern1 = /[\u4e00-\u9fa5]+/g;
for (var i = 0; i < arr2.length; i++) {
if (pattern1.test(arr2[i])) {
console.log(arr2[i]); // 匹,中
}
}
上面的代码为何只输出了 匹、中?
8 回答4.8k 阅读✓ 已解决
6 回答3.5k 阅读✓ 已解决
5 回答2.9k 阅读✓ 已解决
5 回答6.4k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
全局匹配影响的
lastIndex:下一个匹配的索引值。(这个属性只有在使用g参数时可用)
在全局匹配下,匹配成功后正则表达式的lastIndex会增加,若开始为0,如果上一次匹配成功了。lastIndex就会变为1,而进行一下个字母比较就是从位置1开始比较的,你第二个为
配
,只有一个,lastIndex为0的话可以匹配,但是为1,找配
后面的字符串找不到,所以匹配失败,失败后lastIndex变为0,下次从0开始搜索,中
匹配成功....由上可知,若想显示,lastIndex是逐渐增加的,类似于下面的才能显示出来
所以应该去掉/g,或者循环时将lastIndex重置为0