2013-03-07 46 views
0

下面的表达式:两位数的正则表达式Patterm比赛中的JavaScript

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

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

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

此结果发生在FF和IE9中。

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

编辑更新:

我做了jfiddle全面展示问题。我正在使用的正则表达式包含负面预测声明。看来,如果我包含断言的所有开放参数,它就会失败。如果我没有包含插入的开放零件,它也会失败。但是,如果我包括断言的初始开局准则之外的所有内容,它就会起作用。我知道用(?:...)组成的团队没有编号。但似乎人们必须在断言中包括所有其他公开的参与者,以便正确计数。所以你会在jfiddle中看到$ 11不起作用,但$ 10却起作用。

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

感谢您看这个。

+3

在正则表达式*中至少有11个组时,使用替换字符串中的$ 11'对我有效。您应该发布正则表达式本身。 – Pointy 2013-03-07 14:32:55

+1

我想你没有匹配'$ 11'。你可以玩:'“1234567890”.replace(/ ^(\ d)(\ d)(\ d)(\ d)(\ d)(\ d)(\ d)(\ d) (\ d)/,“$ 10”)。在我的情况下,它可以在所有浏览器中完美运行。 – VisioN 2013-03-07 14:36:01

+0

请参阅编辑更新。正则表达式中确实有11个组,但其中一个组发起负向前瞻断言。这个断言的开端显然不应该被计算,但在断言中应该是所有其他的变量。 – 2013-03-07 19:04:26

回答

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/

的关键是,你需要整个字符串与正则表达式匹配,如果你在它针对特定的位置。尝试从.*以上的正则表达式,你会看到它打破了替代。

+0

请参阅编辑更新和对以前答案的评论。感谢您看这个。 – 2013-03-07 19:06:09

+0

如果我取出。*和$,我得到“caklmno”,这是我想要的,因为我只想替换在较大字符串内匹配的子字符串。我认为你需要。*,因为你正在同时搜索字符串的开始和结尾。 – 2013-03-07 21:06:04

+0

@JackHerr你是对的。 – 2013-03-07 21:18:03