如何结合这些正则表达式的JavaScript

Noh*_*sib 2 javascript java regex java-ee

嗨我想在JS中使用regEx来识别3个相同的连续字符(可能是字母,数字以及所有非字母数字字符)

这标识了3个相同的连续字母和数字:'(([0-9a-zA-Z])\ 1\1)'
这标识了3个相同的连续非字母数字:'(([^ 0-9a-zA-Z])\1\1)"

我试图将两者结合起来,如下:'(([0-9a-zA-Z])\ 1\1)|(([^ 0-9a-zA-Z])\ 1\1)'

但是我做错了什么并且它不起作用..(对于'88aa3BBdd99 @@'返回true)

编辑:并找到NO 3相同的字符,这似乎是错误的/(^([0-9a-zA-Z] | [^ 0-9a-zA-Z])\ 1\1)/ - > RegEx在JS中找到No 3相同的连续字符

谢谢Nohsib

Mar*_*der 6

问题是在整个正则表达式中,反向引用从左到右计算.因此,如果你将它们组合在一

(([0-9a-zA-Z])\2\2)|(([^0-9a-zA-Z])\4\4)
Run Code Online (Sandbox Code Playgroud)

你也可以删除外部的parens:

([0-9a-zA-Z])\1\1|([^0-9a-zA-Z])\2\2
Run Code Online (Sandbox Code Playgroud)

或者你可以在一组parens中捕获替代方案,并在末尾附加一个反向引用:

([0-9a-zA-Z]|[^0-9a-zA-Z])\1\1
Run Code Online (Sandbox Code Playgroud)

但是因为你的角色类无论如何都匹配所有角色你也可以这样:

([\s\S])\1\1
Run Code Online (Sandbox Code Playgroud)

如果激活DOTALL或SINGLELINE选项,则可以使用.:

(.)\1\1
Run Code Online (Sandbox Code Playgroud)