2013-03-20 49 views
0

什麼是錯的,因爲用一個例子解釋:jQuery的正則表達式是行不通的,因爲我希望

form = 'some other [1][2] data ... data[Company][c_list][2][name_2] ... some other data'; 
form.replace(new RegExp('[c_list][2]', 'g'), '[c_list][1]'); 

得到:data[Company][c_list][2][name[c_list][1]]

需要:data[Company][c_list][1][name_2]

什麼是錯我的代碼?

感謝

+0

我在這裏看不到jquery,只是很好的Javascript。 – tjameson 2013-03-20 09:35:07

+0

這是香草的Javascript。 – Boaz 2013-03-20 09:35:12

+0

沒有什麼叫jQuery正則表達式 – 2013-03-20 09:36:42

回答

3

字符[]被用來製造一組,所以[c_list]在正則表達式不匹配的字符序列[c_list],它的一個字符是c_list匹配。

在表達式中將字符[]轉義。當你正在寫的圖案爲一個字符串,你需要使用\\\的模式:

form.replace(new RegExp('\\[c_list\\]\\[2\\]', 'g'), '[c_list][1]'); 

你也可以寫正則表達式爲文字,那麼你只使用\逃脫字符:

form.replace(/\[c_list\]\[2\]/g, '[c_list][1]'); 
1

在正則表達式[...]具有定義字符類的特殊含義。我認爲你正在尋找

form.replace(new RegExp('\[c_list\]\[2\]', 'g'), '[c_list][1]'); 

其中括號已被轉義。

+0

單個反斜槓轉義字符串中的字符。你需要用'\\\'在字符串中加一個反斜槓,以便字符在模式中被轉義。 – Guffa 2013-03-20 09:42:07

+0

是的,我從來沒有使用過'新的RegExp()',所以直到我看到你的答案,我贊成的時候才意識到。快速元問題,因爲你是一個217K SO忍者:我應該糾正我的答案,給你的答案功勞,或者我應該刪除我的答案? – 2013-03-20 09:43:23

0

轉義正則表達式的括號。

相關問題