用于匹配州和邮政编码的正则表达式

时间:2018-01-14 01:02:55

标签: javascript regex

我需要一个与大块文本中的以下字符串匹配的正则表达式:

California 94558
California 94558-0000
North Dakota  88888
ND  88888-8888

状态和zip之间需要双重和单个空格。

到目前为止,我有这个:

/([a-zA-Z]+(\s+[a-zA-Z]+))\s+(\d{5}([\-]\d{4})?)/g

但我不能让它与单字状态一起工作。我还想添加加拿大邮政编码,但我想我不会在这里混淆。

3 个答案:

答案 0 :(得分:2)

你其实很亲密。你的正则表达式只需要指定空格第二个单词组合是可选。我只添加了一个?来使其正常工作:

([a-zA-Z]+(\s+[a-zA-Z]+)?)\s+(\d{5}([\-]\d{4})?)
                        ^ there

一种稍微简洁的方法是禁止捕获所有匹配的组,然后选择两个最有用的组:

([a-zA-Z]+(?:\s+[a-zA-Z]+)?)\s+(\d{5}(?:[\-]\d{4})?)

现在,第1组将始终包含状态 - 一个或两个单词 - 而第2组将始终包含邮政编码。

另请参阅regex101 demo

答案 1 :(得分:0)

如果您总是期待state state zipstate zip

您可以将此细分^\w+\s+(\w|\d|\s)+-?\d+mg标记分开,以进行多行和全局正则表达式匹配。

答案 2 :(得分:0)

试试这个正则表达式!

[a-zA-Z]+\s?[a-zA-Z]+\s+\d{5}(-\d{4})?

以下是regex101中上述正则表达式的输出。

regex output