[英]How to combine these regex for javascript
嗨,我正在尝试在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 @@,返回真)
编辑:并找到3个相同的字符,这似乎是错误的/(^([0-9a-zA-Z] | [^ 0-9a-zA-Z])\\ 1 \\ 1)/-> RegEx在JS中查找3个相同的连续字符
谢谢Nohsib
问题是在整个正则表达式中,反向引用是从左到右计算的。 因此,如果将它们结合起来,您的数字就会改变:
(([0-9a-zA-Z])\2\2)|(([^0-9a-zA-Z])\4\4)
您还可以删除外部括号:
([0-9a-zA-Z])\1\1|([^0-9a-zA-Z])\2\2
或者,您可以将备选方案收集在一组括号中,然后在末尾附加一个反向引用:
([0-9a-zA-Z]|[^0-9a-zA-Z])\1\1
但是,由于您的字符类始终与所有字符匹配,因此您也可以像这样:
([\s\S])\1\1
如果激活DOTALL或SINGLELINE选项,则可以使用.
代替:
(.)\1\1
实际上要简单得多:
(.)\\1\\1
(.)
匹配任何字符,并且每个\\1
是一个后向引用,它与第一个捕获组所匹配的确切字符串匹配。 您应该注意什么.
实际匹配,然后修改组(在括号中)以适合您的确切需求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.