javascript正则表达式 - 为什么我捕获的字符串错了?

时间:2015-05-25 21:07:21

标签: javascript regex

我需要用变量出现替换字符串中的出现,然后重新构造字符串。我用javascript想出了一些正则表达式魔法,它应该是一个快照。然而,在经历了大量的烦恼和敲打之后,我向他的堆栈溢出的兄弟姐妹们伸出了敏锐的目光。

我正在尝试删除[[XYZ]],如下面的代码所示:

div(ng-if="item.end < date")

但是,当我运行它时返回:

<!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,
}

瓦?

3 个答案:

答案 0 :(得分:1)

您必须使用[转义\。但是等等,因为你使用字符串而不是正则表达式字面值,你必须使用另一个\转义\

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

答案 1 :(得分:0)

尝试使用

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

您需要转义特殊字符,例如[]

我删除了你的功能,我希望没问题。

答案 2 :(得分:0)

您需要转义[]

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