【发布时间】:2015-09-15 06:34:05
【问题描述】:
我正在为一个较大字符串中的电话号码编写一个正则表达式,但我在满足一个特定要求时遇到了一些麻烦。
基本要求是匹配以下电话号码样式 - 带有区号或国际前缀的标准澳大利亚电话号码以及空格和连字符的一点余地:
0395551234
03 9555 1234
03-9555-1234
+61395551234
但是,我只想匹配一个数字,如果它在第一个字符之前和最后一个字符之后有一个单词边界,所以下面的样式不应该匹配:
0395551234word
03 9555 1234word
03-9555-1234word
+61395551234word
word0395551234
word03 9555 1234
word03-9555-1234
word+61395551234
这是我的正则表达式字符串:
((\+61[ \-]?[2378]|\b0[2378]|\(0[2378]\))[ \-]?[0-9]{4}[ \-]?[0-9]{4}\b)
但这不正确,因为它仍然会匹配:
word+61395551234
我不能在+ 字符之前使用单词边界\b,因为+ 字符不是单词字符。我还要注意,我使用的是 JavaScript,所以如果 + 字符位于行首或前面有空格字符,我不能使用正面构造来匹配 + 字符。如果我可以使用它,这是一个可以满足我要求的 Perl 正则表达式:
(((?<=^|\s)\+61[ \-]?[2378]|\b0[2378]|\(0[2378]\))[ \-]?[0-9]{4}[ \-]?[0-9]{4}\b)
我也不能对我正在使用的大字符串进行任何额外的处理,因为我需要完全保留它的结构,所以在尝试匹配之前没有replace() 操作。
【问题讨论】:
标签: javascript regex