2015-07-21 23 views
3

在浏览器控制台中,以下函数的输出是一系列的替换true和false。任何想法?为什么我的Javascript正则表达式输出不一致?

 

    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("でしたコンサート"); 


回答

1

因为你与test使用g改性剂。

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("でしたコンサート");

+0

谢谢!删除“\ g”修饰符适用于我,但此“RegExp.lastIndex = 0”不适用。什么是实际问题?请使用 –

+0

'regex.lastIndex = 0',参见代码示例。确实,删除'g'也应该起作用。选择最适合你的东西。 –

3

您使用的是全球(g)标志。

根据MDN:

exec()(或与之结合),test()呼吁同全球正则表达式的情况下多次将提前超越了上一次的比赛。

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

相关问题