猿问

js正则匹配中文

// 用正则匹配中文


var arr2 = ["匹","配","中","文"];

var pattern1 = /[\u4e00-\u9fa5]+/g;

for (var i = 0; i < arr2.length; i++) {

    if (pattern1.test(arr2[i])) {

        console.log(arr2[i]);    // 匹,中

    }

}

上面的代码为何只输出了 匹、中?


Cats萌萌
浏览 439回答 1
1回答

暮色呼如

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

相关分类

JavaScript
我要回答