为了账号安全,请及时绑定邮箱和手机立即绑定

js正则匹配中文

js正则匹配中文

Cats萌萌 2019-02-15 19:19:20
// 用正则匹配中文var arr2 = ["匹","配","中","文"];var pattern1 = /[\u4e00-\u9fa5]+/g;for (var i = 0; i < arr2.length; i++) {    if (pattern1.test(arr2[i])) {        console.log(arr2[i]);    // 匹,中    }}上面的代码为何只输出了 匹、中?
查看完整描述

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]);    

    }

}


查看完整回答
反对 回复 2019-02-20
  • 1 回答
  • 0 关注
  • 438 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号