我正在寻找一种解决方案来替换它之前和之后没有括号的子串(id)。
这是我当前的代码,非常简单:
'deal[ptions_attributes][0][price]'.replace(/\[\d+\]/, '[new_id]'));
result: deal[ptions_attributes][new_id][price]
所以我真的不会在新的id中使用括号 - '[new_id]'用它替换substring。 有没有办法在替换时先忽略'['括号并保持干净'new_id'?
答案 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'
,这可能是您的意图。