【问题标题】:Two-digit RegEx Patterm Match in JavaScriptJavaScript 中的两位正则表达式模式匹配
【发布时间】:2013-03-07 14:28:37
【问题描述】:

下面的表达式:

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

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

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

这个结果出现在 FF 和 IE9 中。

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

编辑更新:

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

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

感谢您查看此内容。

【问题讨论】:

  • 在替换字符串中使用$11 对我有用当正则表达式中至少有11 个组时。您应该发布正则表达式本身。
  • 我猜你没有匹配到$11。你可以玩:"1234567890".replace(/^(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)/, "$10")。就我而言,它在所有浏览器中都能完美运行。
  • 请查看编辑更新。正则表达式中确实有 11 个组,但其中一个启动了否定的前瞻断言。该断言的开头括号显然不应该计算在内,但断言中的所有其他括号都应该计算在内。
  • 感谢您的关注。

标签: javascript regex replace special-characters


【解决方案1】:

这对我来说很好用:

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/

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

【讨论】:

  • 请参阅上一个答案的编辑更新和 cmets。感谢您查看此内容。
  • 如果我取出 .* 和 $,我会得到“caklmno”,这就是我想要的,因为我只想替换更大字符串中匹配的子字符串。我认为您需要 .* 因为您同时搜索字符串的开头和结尾。
猜你喜欢
  • 1970-01-01
  • 2011-11-29
  • 2012-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多