使用JS替换id的非贪婪RegEx

时间:2012-12-06 13:05:13

标签: javascript regex

我正在寻找一种解决方案来替换它之前和之后没有括号的子串(id)。

这是我当前的代码,非常简单:

'deal[ptions_attributes][0][price]'.replace(/\[\d+\]/, '[new_id]'));
result: deal[ptions_attributes][new_id][price]

所以我真的不会在新的id中使用括号 - '[new_id]'用它替换substring。 有没有办法在替换时先忽略'['括号并保持干净'new_id'?

4 个答案:

答案 0 :(得分:2)

这假设[...]中的其他字符串都没有以数字

结尾
/\d+(?=\])/

答案 1 :(得分:1)

您可以通过环视来执行此操作:

/(?<=\[)\d+(?=\])/

将匹配括号之间的数字,必须在那里才能使比赛成功,但不会成为比赛的一部分。

但正如评论中所说,lookbehind((?<=...)在javascript中不起作用。所以我不确定你想要的是什么。

答案 2 :(得分:0)

你可以尝试这样的事情。

'deal[ptions_attributes][0][price]'.replace(
    /(\[)\d+(\])/,
    function(matchedString,firstCaptureGroup,secondCaptureGroup){
        return firstCaptureGroup + 'new_id' + secondCaptureGroup;
    }
);

您基本上捕获捕获组中的“[”和“]”,然后将它们放回输出中。这可确保您捕获正确的内容,但最终不会强制您在输出字符串中包含括号。您可以轻松扩展它以匹配要替换的ID之前和之后的任何字符串。

答案 3 :(得分:0)

我不确定您问题的确切性质,但是您不能使用:

 '[' + 'new_id' + ']'

这允许您使用变量代替'new_id',这可能是您的意图。