繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM