【问题标题】:Regex match being overwritten正则表达式匹配被覆盖
【发布时间】:2014-09-16 12:13:28
【问题描述】:

我正在尝试使用正则表达式清理电话号码。

我不想要数字之间的任何分隔字符,也不想要本地 (0) 部分。分隔符可以是任何非数字字符。

即。数字可能是:

  • +44 (00) 845 740 4404
  • +44-(00)-845-740-4404
  • +44-(00)-845-740=4404(不太可能,但可能是错字)

这匹配 (0) 部分很好:

http://regex101.com/r/cB6hN4/3

但如果我添加 |\D+ 来匹配一个非数字字符,它会覆盖我的第一个匹配项:

http://regex101.com/r/cB6hN4/2

如何在一个正则表达式中保留两个匹配项?

【问题讨论】:

  • 你期望什么输出?

标签: javascript regex


【解决方案1】:

最后不要使用|\D+,而是尝试使用|[^()\d]+

正则表达式为\((\d+)\)|[^()\d]+

DEMO

但要考虑到括号不能用作分隔符,如您在演示中看到的那样

【讨论】:

  • 感谢您的回答,这是最容易理解的,尽管第二个将括号作为分隔符。 regex101.com/r/cB6hN4/9
【解决方案2】:

我想你想要这样的东西,

\((\d+)\)|(?:(?!\(\d+\))\D)+

DEMO

(?:(?!\(\d+\))\D)+ 匹配一个或多个非数字字符,但不匹配(\d+)

【讨论】:

  • 感谢您的回答。为了进一步澄清未来的读者,据我了解,没有办法简单地说“保留以前的匹配”:你只需要更聪明地匹配。
猜你喜欢
  • 1970-01-01
  • 2022-10-17
  • 2019-10-06
  • 1970-01-01
  • 2019-03-30
  • 2011-05-01
相关资源
最近更新 更多