2015-06-04 109 views
1
var a = 'toto titi (should be removed) 5'.replace(/\(.*\)|\[.*\]|[^a-zA-Z0-9 ]|tata|tutu|tyty/gi, '!$!'); 
var b = 'toto titi (should be removed) 5'.replace(new RegExp('\(.*\)|\[.*\]|[^a-zA-Z0-9 ]|tata|tutu|tyty', 'gi'), '!$!'); 
console.log(a); 
console.log(b); 

我想通過空間的每個字符是不是數字或字母或一個空格和字符這是beetween更換差異( )和[]。 我有兩個相同的句子,我使用相同的模式。唯一的區別是我對var a使用/regex/flags語法,對於var b使用對象語法new Regex('regex','flags')的JavaScript beetween新的正則表達式(「正則表達式」,「旗」)和/正則表達式/標誌

然而結果與a和b不一樣。

輸出是:

toto titi !$! 5 //a (it's the expected result) 
!$!!$!   //b 

我不明白爲什麼。你能解釋我嗎? 我必須使用對象語法,因爲我需要用變量構建正則表達式。

+0

使用Regexp構造函數時,您需要雙重轉義。 – hwnd

回答

4

在字符串,反斜槓(\)用於轉義特殊字符,如在\\\'\"。在正則表達式中,反斜槓也用於轉義,例如文字\(\.

這意味着,當從字符串創建正則表達式時,還需要在字符串中反斜槓。所以,你會怎麼做:

new RegExp('\\(.*\\)|\\[.*\\]|[^a-zA-Z0-9 ]|tata|tutu|tyty', 'gi') 

使用這個它賦予了預期的結果。

相關問題