正则表达式检测双 Space

Regex Detect Double Space

我正在尝试获取一个正则表达式来检测字符串中是否有双 space。但是,如果它确实检测到双 space,它将 return 视为错误。所以基本上字符串中的任何其他内容都是有效的,除了两个 space 并排。在下面的示例中,下划线 (_) 是 spaces.

'Hello_World' ==> 有效

'Hello__World' ==> 无效

'Hello___World' ==> 无效

'1_2_3_4_5' ===> 有效

'1_2_3__4_5' ==> 无效

这是我当前的正则表达式

/^([^/s/s]*)$/

与其关注 2 space不是的内容,不如对的内容进行消极展望:

^(?!.*  ).+

或者如果第一个和最后一个必须是非spaces(未说明):

^\S((?!.*  ).*\S)?$

这也允许恰好 1 个非 space 作为整个输入。


使这项工作起作用的主要因素是这个表达式 ^(?!.* ),它是一个 negative 前瞻 (?!.* ) anchored^ 输入的开始。它断言,在不消耗输入的情况下,当前点后面的文本确实 not 匹配给定的表达式,在本例中为 ".* "(为清楚起见添加引号),它是 "anything then two spaces"。换句话说 "two spaces do not appear at any point after here".

第二个选项可以写成 ^\S(?!.* ).*\S$ - 与第一个选项相同,但两端都带有 \S,但这需要 不同的 个字符在每一端,因为 \S 消耗输入,所以它不会匹配单个字母,例如 "X"。我使除第一个 可选 以外的所有字符,它允许单个字符通过(根据您的要求),同时保留两个 spaces.

你可以使用类似的东西

^(\S\s{0,1})*\S$