如何匹配任何不包含连续重复字母的字符串

时间:2018-01-03 14:59:20

标签: javascript regex regex-lookarounds

如果没有任何相同的连续字母,我的正则表达式应匹配。

例如:

  • “ploplir”应匹配
  • “plo pp ir”不应匹配

所以我使用这个正则表达式:

/([.])\1{1,}/

但它与我想要的完全相反。如何使匹配正常工作?

2 个答案:

答案 0 :(得分:2)

代码

See regex in use here

\b(?!\w*(\w)\1)\w+\b



var r = /\b(?!\w*(\w)\1)\w+\b/g
var s = "ploplir ploppir"

console.log(s.match(r))




说明

  • \b断言位置为单词边界
  • (?!\w*(\w)\1\w*)否定前瞻确保后续内容不匹配
    • \w*匹配任意数量的字符
    • (\w)将单词字符捕获到捕获组1
    • \1匹配最近与第一个捕获组匹配的文本
  • \w+匹配一个或多个单词字符
  • \b断言位置为单词边界

答案 1 :(得分:1)

也许您可以使用lookarounds检查字符串中是否没有连续的字母:

^(?!.*(.)(?=\1)).*$

<强>解释

  • 从字符串^
  • 的开头
  • 前瞻性(?!
  • 声称在.* (.)之后,使用群组参考(?=\1)
  • 后,角色\1后面没有相同的字符.*
  • 关闭否定前瞻
  • 匹配零个或多个字符{{1}}
  • 字符串的结尾