2015-05-25 19 views
1

我需要用一個變量來替換一個字符串中的事件,然後重建這個字符串。我想到了JavaScript的一些正則表達式魔法,它應該是一個單元。然而,在我的腦海中充滿了驚心動魄和激動之後,我伸出援助之手,向兄弟姐妹們伸出援助之手,他們敏銳的目光。javascript正則表達式 - 爲什麼我的抓取的字符串是錯的?

我試圖刪除[XYZ]如下面的代碼:

<!DOCTYPE html> 
<html> 
<body> 

<p>Click the button to replace and switch:</p> 

<p id="demo">{ 
    "[[XYZ]]-ENGINES": "L300", 
    "[[XYZ]]-INTERIOR": "BURGCOMDDD", 
    "[[XYZ]]-BASEBOAT": "PUTT" 
} 
</p> 

<button onclick="myFunction()">Try it</button> 

<script> 

function replaceAll(string, find, replace) { 
    return string.replace(new RegExp(find, 'g'), replace); 
} 

function myFunction() { 

    var str = document.getElementById("demo").innerHTML; 
    var replaceString = "\"[[XYZ]]?-*(.+)\": \"([A-Z0-9]+)\"?,*" 
    var replacementString = '$1/$2 = true,'; 

     newstr = replaceAll(str, replaceString, replacementString) 
     alert(newstr) 

} 

</script> 

</body> 
</html> 

但是,當我運行它返回:

{ 
    [XYZ]]-ENGINES/L300 = true, 
    [XYZ]]-INTERIOR/BURGCOMDDD = true, 
    [XYZ]]-BASEBOAT/PUTT = true, 
} 

當它應該是:

{ 
    ENGINES/L300 = true, 
    INTERIOR/BURGCOMDDD = true, 
    BASEBOAT/PUTT = true, 
} 

Wh?

+0

是'[XYZ] - '是一個固定的前綴?如果是這樣,你可以用一個非常簡單的方法來完成。 – Dinei

+0

是的,它是一個固定的前綴。順便說一下,其他答案都沒有奏效。 – jimijon

回答

1

你必須逃離[\。別急,因爲你使用一個字符串,而不是一個正則表達式的文字,你必須逃離\另一個\

'"[[XYZ]]-ENGINES": "L300"'.replace(
    new RegExp("\"\\[\\[XYZ]]?-*(.+)\": \"([A-Z0-9]+)\"?,*", 'g'), 
    '$1/$2 = true,' 
); 
+0

這工作!這是雙倍的祕密成分。謝謝。 – jimijon

0

嘗試使用

function myFunction() { 
    var str = document.getElementById("demo").innerHTML; 
    var newstr = str.replace(/\[\[XYZ\]\]-/g, ""); 
    alert(newstr); 
} 

您將需要轉義特殊字符,如[]

我刪除了你的功能,我希望這沒關係。

0

你需要逃避[]

var replaceString = "\"\[\[XYZ\]\]?-*(.+)\": \"([A-Z0-9]+)\"?,*" 
相關問題