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

时间:2015-12-29 17:46:27

标签: javascript regex

我想要合并:

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

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

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

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

这是javascript btw。

2 个答案:

答案 0 :(得分:1)

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

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的第二个正则表达式,并且您希望按照他在问题中描述的方式将它们组合在一起,那么这是一种简单的方法没有优化的是以下内容。

(REGEX1|REGEX2)

用括号括住正则表达式并用|除以两者。

你的正则表达式如下:

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

你的第一个正则表达式中有一个错误,但它使它无效。试试这个。

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

您想要\\

的第二个角色类中有\

答案 1 :(得分:0)

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

\\- 

将匹配\(92)和之间的ascii字符(32)。删除其中一条斜杠。

Reference