正则表达式 - 不重复句号和逗号和连字符

时间:2016-06-30 20:20:00

标签: javascript regex regex-negation

我正在尝试为地址创建一个正则表达式。

我目前有[a-zA-Z0-9-\\.\-\,\\-\s\n],但它与重复时段,重复连字符和重复逗号相匹配。有什么办法可以将逗号,连字符和句点的数量限制为1吗?

它应匹配"5432 Lorem St. Tokyo, Japan 1234-54"

且不应与"5323 Dolor Ave... Kyoto,,,, Japan 555-33----33"

匹配

3 个答案:

答案 0 :(得分:2)

要禁止使用"逗号","点"或"连字符"中的重复字符,您可以使用在开始时锚定的负前瞻:

/^(?!.*([.,-])\1)[a-zA-Z0-9\s.,-]+$/.test(str)
  ^^^^^^^^^^^^^^^

(?!.*([.,-])\1)前瞻检查是否有重复的逗号,点或连字符(请参阅([.,-])\1 - 捕获组后跟反向引用),如果找到则匹配失败。

另外,要禁止部分匹配,必须使用锚点 - ^表示字符串的开头,$表示字符串的结尾。

答案 1 :(得分:0)

[^a-zA-Z0-9-\.-\,\-\s\n][a-zA-Z0-9-\.-\,\-\s\n][^a-zA-Z0-9-\.-\,\-\s\n]

是啰嗦的,但会匹配那些没有(^)在其两侧有另一个元素的元素中的一个。这样做你想要的吗?

答案 2 :(得分:0)

这样的事情怎么样?

^([a-zA-Z0-9\s\n]|(([\.,-])(?!\3)))*$

所以这匹配任何只包含任意数量的字母,数字,空格或行空格的字符串或者不会立即跟随的句号,逗号或连字符。