2016-10-25 35 views
0

我試圖消除一些字符,如果在我的字符串中找到像v_ [i]將v。要做到這一點我使用RegExp,但它不捕獲組。RegexExp沒有正確捕獲組

var string='v_[i]'; 
var regexExp = new RegExp('_[\w+]','ig'); 
var finalstring = string.replace(regexExp,''); 
alert(finalstring); 

而在另一方面,如果我使用一個字符串它完美

var finalstring = string.replace(/_\[\w+\]/ig,''); 

那麼爲什麼正則表達式沒有捕捉爲文本字符串不羣。

+0

'新的RegExp( '_ [\ w +]', 'IG')'你忘了逃避你的括號和反斜線 - >應該是'新RegExp('_ \\ [\\ w + \\]','ig')' –

+0

它工作正常,爲什麼需要添加額外的斜槓? –

+0

那是因爲當你用構造函數創建一個正則表達式時,你傳入一個字符串。在將字符串傳遞給構造函數之前,字符串中的任何'\'都會首先轉義下一個字符,因此'_ [\ w +]''變爲'_ [w +]'。 –

回答

0

你應該逃避你的正則表達式的括號:

var string = 'v_[i]'; 
var regexExp = /_\[\w+\]/ig; 
var finalstring = string.replace(regexExp, ''); 
+0

你是對的。它有點多餘。我會糾正我的答案。 –