2012-02-29 28 views
1

我想創建一個正則表達式,可以很容易地替換一個輸入名稱,例如「holes [0] [shots] [0] [unit]」到「holes [0] [shots] 1 [unit ]」。我基本上是克隆一個HTML輸入,並希望確保其位置遞增。Javascript正則表達式編組

我得到了我的正則表達式建成並正常工作使用這個(真棒)工具:http://gskinner.com/RegExr/

這裏是我當前的正則表達式:

(.*\[shots\]\[)([0-9]+)(\].*\]) 

和我使用的是替換,例如:

$12$3 

這將「holes [0] [shots] [0] [unit]」轉換爲「holes [0] [shots] [2] [unit]」。這正是我想要的。然而,當我嘗試這在JavaScript(http://jsfiddle.net/PH2Rh/):

var str = "holes[0][shots][0][units]"; 
var reg =new RegExp("(.*\[shots\]\[)([0-9]+)(\].*\])", "g"); 

console.log(str.replace(​reg,'$1'));​​​​​​​​​​​​​​​​​​​​​​​​ 

我得到以下輸出:孔[0

我不明白,我的第一組應該如何代表「孔[0」 ,因爲我包括了整個[鏡頭] [部分內容。

我很欣賞這方面的任何投入。謝謝。

回答

4

在字符串中,單個\不被解釋爲正則表達式轉義字符。爲了逃避字符串文字內的支架,你必須使用兩個反斜線,\\

var reg = new RegExp("(.*\\[shots\\]\\[)([0-9]+)(\\].*\\])", "g"); 

的優選解決方案是使用正則表達式文字:

var reg = /(.*\[shots\]\[)([0-9]+)(\].*\])/g; 
0

看起來,這個工程:

var str = "holes[0][shots][0][units]"; 
var reg = /(.*\[shots\]\[)([0-9]+)(\].*\])/; 
console.log(str.replace(​reg,'$1'));​​​​​​​​​​​​​​​​​​​​​​​​