【问题标题】:regexp to match characters not flowed by a character that is repeated an amount of times正则表达式匹配不跟随重复多次的字符的字符
【发布时间】:2014-08-12 22:51:43
【问题描述】:

我构建了这个正则表达式来匹配字母、数字和点
仅当它们没有成功重复时才点
示例:

something.somethnElse.another.then.something

这是一个匹配,因为点是分开的。 但在以下情况下:

something..thensomething

不匹配,因为有一个或多个点彼此相邻
这是我的正则表达式,请推荐我为什么它不起作用

[a-zA-Z0-9\.]+(?!\.{2,})

我也试过了

[a-zA-Z0-9\.]+(?![\.]+)

但它们都匹配成功的点

【问题讨论】:

  • 试试/^(\w+\.)*\w+$/

标签: javascript regex


【解决方案1】:

你很接近。你可以使用这个正则表达式:

^(?!.*?\.{2})[a-zA-Z0-9.]+$

RegEx Demo

PS:无需转义字符类中的点

【讨论】:

  • 如果至少有 1 个点与其他单词未成功跟随点 RefEx Demo,则失败
【解决方案2】:

首先,表达式应该被锚定,否则它只需要一个非常小的匹配。

此外,您可以将您的表达式视为一串字母和数字,可以被恰好一个点打断。

所以:

/^(?:[a-z0-9]+|\.(?!\.))*$/

【讨论】:

  • 但是你的意思是什么意思请表达应该锚定?表达锚的开始和结束?就像^ 一样,如果不使用,那将如何减少我们的匹配?谢谢
  • 为什么是捕获组? (?:)
  • @Amine 这不是一个捕获组......它是一个重复交替的容器:)
【解决方案3】:

您需要使用字符串开头^ 和字符串结尾$ 锚点,并将前瞻放在开头。

/^(?!.*\.{2})[a-z0-9.]+$/i

Live Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    • 2016-01-15
    相关资源
    最近更新 更多