Javascript 使用JS替换id的非贪婪正则表达式

Javascript 使用JS替换id的非贪婪正则表达式,javascript,regex,Javascript,Regex,我正在寻找一种解决方案来替换前后没有括号的子字符串(id) 以下是我当前的代码,非常简单: 'deal[ptions_attributes][0][price]'.replace(/\[\d+\]/, '[new_id]')); result: deal[ptions_attributes][new_id][price] 所以我真的不习惯在新id中使用括号-“[new_id]”来替换子字符串。 是否有一种方法可以在更换“新id”时忽略第一个“[”括号并保持干净?您可以通过“环顾”来实现这一点:

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

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

'deal[ptions_attributes][0][price]'.replace(/\[\d+\]/, '[new_id]'));
result: deal[ptions_attributes][new_id][price]
所以我真的不习惯在新id中使用括号-“[new_id]”来替换子字符串。
是否有一种方法可以在更换“新id”时忽略第一个“[”括号并保持干净?

您可以通过“环顾”来实现这一点:

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

/(?您可以通过环视来完成此操作:

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

/(?这假设
[…]
中的其他字符串都不以数字结尾

/\d+(?=\])/

这假设
[…]
中的其他字符串都不以数字结尾

/\d+(?=\])/

你可以试试这样的

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

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

您可以尝试类似的方法

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

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

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

 '[' + 'new_id' + ']'

这允许您使用一个变量来代替
'new\u id'
,这可能是您的意图。

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

 '[' + 'new_id' + ']'

这允许您使用一个变量来代替
“new\u id”
,这可能是您的意图。

我不明白您的意思。您能给出一个前后示例吗?您不能使用捕获组吗?如果id是唯一的数字,当然可以。如果其他地方可能有数字,则括号是分隔符,因此您必须匹配它们才能知道您是谁在正确的位置。我不明白你的意思。你能给出一个前后示例吗?你不能使用捕获组吗?如果id是唯一的数字,当然。如果其他地方可能有数字,则括号是分隔符,因此你必须匹配它们才能知道你在正确的位置。你不能在JavaScript中使用“向后看”regex@garyh..是 啊我有时读到回溯在Javascript中不起作用,所以我认为回溯也是如此。奇怪的是,其中一个可以起作用,但另一个不行。@rohit:Lookbehind更难有效地实现。在Python中,有一个限制,它只能用于等长子表达式,这使它变得简单。所有由于使用可变长度的子表达式,匹配它们的速度要慢得多,所以我认为他们认为这太有问题了,所以完全放弃了它。@BasWijnen..不仅在Python中如此。在Java中,它也不允许在look behind中使用可变长度的子表达式。不要考虑它是否也适用于一般的正则表达式。看起来向前看就足够了o解决这个问题。每当我需要使用正则表达式时,我都必须重新学习它。它很有名——“现在你有两个问题”.您不能在JavaScript中使用“向后看”regex@garyh..是的,我有时读到回溯在Javascript中是不起作用的,所以我认为同样的情况也适用于回溯。奇怪的是其中一个可以起作用,但另一个不行。@rohit:Lookbehind更难有效地实现。在Python中,有一个限制,它只能用于或者是等长子表达式,这使它变得简单。允许变长子表达式使匹配它们的速度慢得多,所以我认为他们认为这太有问题了,所以干脆放弃了它。@BasWijnen..不仅在Python中。而且在Java中,它也不允许在look behind中使用变长子表达式。不知道它是否是r general Regex是否也有。看来向前看就足以解决这个问题。每当我需要使用Regex时,我都必须重新学习它。它很有名——“现在你有两个问题”。这就是我一直在寻找的。谢谢。这就是我一直在寻找的。谢谢。