匹配字符串最开头的序列以及中间的其他序列

时间:2017-06-05 13:18:40

标签: regex

我正在尝试找到一种方法来匹配同一个正则表达式中的两个模式,但我似乎无法将两者结合起来。这些是我想要匹配的一些字符串:

0 800-204-4000
0800-204 4000
0 800 -204 - 4000
800 204 4000

我要做的是找到一个正则表达式,它匹配字符串开头的零(如果存在)以及所有后续的空格和短划线。所以我能够使用/^0?/匹配第一个零,并使用/[\s-]*/g匹配所有空格和短划线但是我如何才能将它们组合到同一个表达式中?

编辑:

所以我想匹配第一个0如果它存在以及所有后面的空格和破折号。因此,在上面的示例中,应该在括号中匹配的内容:

[0 ]800[-]204[-]4000
[0]800[-]204[ ]4000
[0 ]800[ -]204[ - ]4000
800[ ]204[ ]4000

答案中提供的正则表达式不起作用。看看:https://regex101.com/r/dMN6xR/1

3 个答案:

答案 0 :(得分:2)

使用or运算符组合正则表达式:

/(^0?)|[\s-]*/g

简化后,它将是

/(^0)?[\s-]+/g

答案 1 :(得分:2)

(^0|[\s-])[\s-]*

要避免空匹配,请设置匹配组(),其匹配起始零^0|空格/ - [\s-],然后匹配其余空白/ - [\s-]*

要在零之前允许空白,只需在启动锚之后添加,如此

(^[\s-]*0|[\s-])[\s-]*

答案 2 :(得分:1)

借鉴其他人的答案,你可以use /^0[-\s]*|[-\s]+/g。我在演示中使用了[- ],因为我不喜欢删除换行时读取的难度。