JavaScript中的两位数RegEx模式匹配

时间:2013-03-07 14:28:37

标签: javascript regex replace special-characters

以下表达式:

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

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

是否应该使用一些逃逸或其他分离?

此结果发生在FF和IE9中。

感谢您的帮助。我希望答案简直令人尴尬!!

修改更新:

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

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

感谢您查看此内容。

1 个答案:

答案 0 :(得分: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/

关键是,如果要定位其中的特定位置,则需要将整个字符串与正则表达式匹配。尝试从上面的正则表达式中取出.*,你会发现它打破了替换。