2011-06-03 115 views
1

不知道我在哪裏做錯了。我有一個字符串,如測試(123x),我試圖找到(123x)和用什麼替代它:JavaScript RegExp替換

這裏是我的代碼

<script type="text/javascript"> 
    var original = "Test (1x)"; 
    var newString = original.replace(new RegExp("\(\d{1,6}[x]{1}\)",original),""); 
    console.log(newString); 
</script> 

我已經測試了正則表達式和它匹配但是,當我登錄到控制檯時,它不會用「」代替(1x)「」

+0

您可能想要使用正則表達式語法來縮短代碼:'original.replace(/ \(\ d {1,6} [x] {1} \)/,「」)' – NT3RP 2011-06-03 16:40:07

回答

10

你應該儘可能使用正則表達式文字:

var original = "Test (1x)"; 
var newString = original.replace(/\(\d{1,6}[x]{1}\)/,""); 

您試圖爲"\(\d{1,6}[x]{1}\)"失敗被解釋爲"(d{1,6}[x]{1})"\‍被簡單地剝離爲未知的轉義序列)。你需要躲避\還有:

new RegExp("\\(\\d{1,6}[x]{1}\\)",original) 

除此之外,對於正則表達式構造函數的第二個參數是標誌(g =全局替換,i =不區分大小寫,等等)。

1

original傳遞給RegExp是錯誤的。您還可以逃避字符串中的每一個斜槓(使之產生一個斜槓正則表達式)作爲\是JS的字符串轉義字符:

original.replace(new RegExp("\\(\\d{1,6}[x]{1}\\)"),""); 

注意[x]{1}是一樣的直接寫入x

你也可以使用一個正則表達式字面

/\(\d{1,6}x\)/ 
+0

有道理,因爲替換被稱爲原來的,但這仍然記錄測試(1x) – Neil 2011-06-03 16:42:54

+0

@尼爾:你沒有閱讀我的答案的最新版本:) – 2011-06-03 16:43:55