正则表达式匹配被覆盖

时间:2014-09-16 12:13:28

标签: javascript regex

我正在尝试使用Regex清理电话号码。

我不希望数字之间有任何分隔符,我不想要本地(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

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

2 个答案:

答案 0 :(得分:2)

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

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

DEMO

但是考虑到括号不能用作分隔符,你可以在演示中看到

答案 1 :(得分:1)

我想你想要这样的东西,

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

DEMO

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