鍍金池/ 問答/HTML/ js正則匹配中文

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]);    // 匹,中
    }
}

上面的代碼為何只輸出了 匹、中?

回答
編輯回答
孤慣

全局匹配影響的
lastIndex:下一個匹配的索引值。(這個屬性只有在使用g參數(shù)時(shí)可用)
在全局匹配下,匹配成功后正則表達(dá)式的lastIndex會增加,若開始為0,如果上一次匹配成功了。lastIndex就會變?yōu)?,而進(jìn)行一下個字母比較就是從位置1開始比較的,你第二個為,只有一個,lastIndex為0的話可以匹配,但是為1,找后面的字符串找不到,所以匹配失敗,失敗后lastIndex變?yōu)?,下次從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 = ["匹","配配","中中中","文文文文"];

所以應(yīng)該去掉/g,或者循環(huán)時(shí)將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]);    
    }
}
2017年7月5日 21:06
編輯回答
純妹

嗯,匹配的不是“匹”和“中”,它匹配的是偶數(shù)索引,,原因不明,,,
然后聽樓上的,干掉g確實(shí)可以
圖片描述

2017年6月14日 19:21
編輯回答
傲嬌范

正則最后的g去掉

<script type="text/javascript">
    var arr2 = ["匹","配","中","文"];
    var pattern1 = /[\u4e00-\u9fa5]+/;
    for (var i = 0; i < arr2.length; i++) {
        if (pattern1.test(arr2[i])) {
            console.log(arr2[i]);    // 匹,中
        }
    }
</script>
2017年3月10日 09:11