组合2个正则表达式,其中一个使用OR运算符进行精确匹配

Combining 2 regexes, one with exact match using OR operator

本文关键字:运算符 OR 一个 正则表达式 2个 组合      更新时间:2023-09-26

我正在尝试合并:

^[a-zA-Z.][a-zA-Z'''- .]*$

带有

('W|^)first'sname('W|$)

如果正确的话,它应该检查确切的短语,名字。它应该与第一个正则表达式或第二个完全匹配的正则表达式相匹配。我尝试过,但似乎无效:

^(([a-zA-Z.][a-zA-Z'''- .]*$)|(('W|^)first'sname('W|$))

这是在javascript btw.

通常可以通过以下方式简单地组合正则表达式:

Regex1+Regex2=(Regex1|Regex2)

^[a-zA-Z.][a-zA-Z'''- .]*$
    + ('W|^)first'sname('W|$) =
(^[a-zA-Z.][a-zA-Z'''- .]*$|('W|^)first'sname('W|$))

因为一些SO用户很难理解数学类比,这里有一个完整的单词解释。

如果您有一个包含内容REGEX1的正则表达式和另一个包含属性REGEX2的正则表达式,并且您希望按照OP在他的问题中描述的方式将它们组合在一起,那么在不进行优化的情况下,一种简单的方法如下。

(REGEX1|REGEX2)

其中,用括号将两个正则表达式括起来,并用|将两者分开。

您的正则表达式如下:

(^[a-zA-Z.][a-zA-Z'''- .]*$|('W|^)first'sname('W|$))

不过,您的第一个正则表达式中有一个错误,导致它无效。试试这个。

(^[a-zA-Z.][a-zA-Z''- .]*$|('W|^)first'sname('W|$))

您在第二个字符类中有'',需要'

问题是第一个正则表达式搞砸了。您不需要双重转义字符。因此

''- 

将匹配'(92)和(32)之间的ascii字符。删除其中一个斜线。

参考