匹配没有任何 2 个连续重复字符的字符串的正则表达式模式

Regular expression pattern to match string without any 2 consecutive repeated characters

我可以非常轻松地编写正则表达式来匹配包含 2 个连续重复字符的字符串:

/(\w)/

我该怎么做补码?我想匹配没有 2 个连续重复字符的字符串。我尝试了以下变体但没有成功:

/(\w)[^]/ ;doesn't work as hoped
/(?!(\w))/ ;looks ahead, but some portion of the string will match
/(\w)(?!)/ ;again, some portion of the string will match

我不想要任何 language/platform 特定的方法来取正则表达式的否定。我想要直接的方法来做到这一点。

下面的正则表达式将匹配没有任何重复字符的字符串。

^(?!.*(\w)).*

(?!.*(\w)) 否定前瞻断言要匹配的字符串将不包含任何重复字符。 .*(\w) 将匹配中间或开头或结尾有重复字符的字符串。 ^(?!.*(\w)) 匹配除重复字符以外的所有起始边界。并且以下 .* 匹配该特定行上存在的所有字符。请注意,这也匹配空字符串。如果您不想匹配空行,请将最后的 .* 更改为 .+

请注意 ^(?!(\w)) 仅检查字符串或行开头的重复字符。

向前看和向后看,统称为"lookaround",是零长度断言,就像行的开始和结束一样。它们不消耗字符串中的字符,而仅断言匹配是否可能。 Lookaround 允许您创建没有它们就无法创建的正则表达式,或者没有它们会变得非常冗长。