2015-07-21 115 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來解決此問題。

相關問題