0

以下表达式:

targetString = targetString.replace(parenthesizedRegEx, "$3$1$11");

其中 parenthesizedRegEx 是一个有效的带括号的正则表达式,用一个字符串替换匹配的文本,该字符串是第三项、第一项、第一项和文字“1”的串联。就好像它忽略了“两位数”括号项索引“$11”并将其视为“$1”和文字“1”。

是否应该使用一些转义或其他分隔?

此结果出现在 FF 和 IE9 中。

谢谢你的帮助。我希望答案是令人尴尬的简单!

编辑更新:

我做了一个 jfiddle 来全面展示这个问题。我使用的正则表达式包括一个否定的前瞻断言。似乎当我包含断言的所有开放括号时,它失败了。如果我不包含任何插入的开放括号,它也会失败。但是,如果我包括除了断言的初始开头括号之外的所有内容,它就可以工作。我知道用 (?:...) 组成的组没有编号。但似乎必须在断言中包含所有其他开放括号才能正确计数。所以你会在 jfiddle 中看到 $11 不起作用,但 $10 起作用。

http://jsfiddle.net/pxMFx/1/

谢谢你看这个。

4

1 回答 1

0

这对我来说很好:

var regex = /^(\w)(\w)(\w)(\w)(\w)(\w)(\w)(\w)(\w)(\w)(\w).*$/i;

alert("abcdefghijklmno".replace(regex,"$3$1$11"));

http://jsfiddle.net/J3RAa/

关键是,如果您要针对其中的特定位置,您需要将整个字符串与您的正则表达式进行匹配。尝试去掉.*上面的正则表达式,你会发现它破坏了替换。

于 2013-03-07T15:34:12.917 回答