为什么我的Javascript正则表达式的输出不一致?

时间:2015-07-21 23:35:39

标签: javascript regex

在浏览器控制台中,以下函数的输出是一系列的alterante true和false。任何的想法?


    function checkSpecificLanguage(text_val) {
    // Force string type`enter code here`


        var regex =   /^[\u3000-\u303F\u3040-\u309F\u30A0-\u30FF\uFF00-\uFFEF\u4E00-\u9FAF\u2605-\u2606\u2190-\u2195u203B]+$/ig; 

        console.log( text_val+"-"+regex.test(text_val) );
        console.log( text_val+"-"+regex.test(text_val) );
        console.log( text_val+"-"+regex.test(text_val) );
        console.log( text_val+"-"+regex.test(text_val) );
        console.log( text_val+"-"+regex.test(text_val) );


      return  regex.test(text_val);
    }

checkSpecificLanguage("でしたコンサート");


2 个答案:

答案 0 :(得分:3)

您正在使用全局(g)标记。

根据MDN:

  

exec()(或与之结合使用)一样,在同一个全局正则表达式实例上多次调用的test()将超过上一个匹配。

您可以通过设置lastIndex来解决此问题。

答案 1 :(得分:1)

由于您与g一起使用的test修饰符。

MDN

  在同一个全局正则表达式实例上多次调用的

test()将超过上一个匹配。

每次之后使用regex.lastIndex = 0来解决此问题。 如果您不需要多次匹配,请删除/g修饰符。



function checkSpecificLanguage(text_val) {
        var regex =   /^[\u3000-\u303F\u3040-\u309F\u30A0-\u30FF\uFF00-\uFFEF\u4E00-\u9FAF\u2605-\u2606\u2190-\u2195u203B]+$/ig; 
        console.log( text_val+"-"+regex.test(text_val) );
        regex.lastIndex = 0
        console.log( text_val+"-"+regex.test(text_val) );
        regex.lastIndex = 0
        console.log( text_val+"-"+regex.test(text_val) );
        regex.lastIndex = 0
        console.log( text_val+"-"+regex.test(text_val) );
        regex.lastIndex = 0
        console.log( text_val+"-"+regex.test(text_val) );
      return  regex.test(text_val);
    }
checkSpecificLanguage("でしたコンサート");