【发布时间】:2013-03-07 14:28:37
【问题描述】:
下面的表达式:
targetString = targetString.replace(parenthesizedRegEx, "$3$1$11");
其中 parenthesizedRegEx 是一个有效的带括号的正则表达式,用一个字符串替换匹配的文本,该字符串是第三项、第一项、第一项和文字“1”的连接。这就好像它忽略了“两位数”括号项索引“$11”并将其视为“$1”和文字“1”。
是否应该使用一些转义或其他分隔符?
这个结果出现在 FF 和 IE9 中。
感谢您的帮助。我希望答案简单到令人尴尬!
编辑更新:
我做了一个 jfiddle 来全面展示这个问题。我使用的正则表达式包括一个否定的前瞻断言。似乎当我包含断言的所有开放括号时,它失败了。如果我不包含任何插入的开放括号,它也会失败。但是,如果我包括除了断言的初始开头括号之外的所有内容,它就可以工作。我知道用 (?:...) 组成的组没有编号。但似乎必须在断言中包含所有其他开放括号才能正确计数。所以你会在 jfiddle 中看到 $11 不起作用,但 $10 起作用。
感谢您查看此内容。
【问题讨论】:
-
在替换字符串中使用
$11对我有用当正则表达式中至少有11 个组时。您应该发布正则表达式本身。 -
我猜你没有匹配到
$11。你可以玩:"1234567890".replace(/^(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)/, "$10")。就我而言,它在所有浏览器中都能完美运行。 -
请查看编辑更新。正则表达式中确实有 11 个组,但其中一个启动了否定的前瞻断言。该断言的开头括号显然不应该计算在内,但断言中的所有其他括号都应该计算在内。
-
感谢您的关注。
标签: javascript regex replace special-characters