Javascript Regexp 从变量动态生成?

2022-08-30 02:45:10

如何将两个正则表达式模式构造为一个?

例如,我有一个长模式和一个较小的模式,我需要将较小的一个放在长模式的前面。

var pattern1 = ':\(|:=\(|:-\(';
var pattern2 = ':\(|:=\(|:-\(|:\(|:=\(|:-\('
str.match('/'+pattern1+'|'+pattern2+'/gi');

这不起作用。当我连接字符串时,所有斜杠都消失了。


答案 1

您必须使用正则表达式

str.match(new RegExp(pattern1+'|'+pattern2, 'gi'));

当我连接字符串时,所有斜杠都消失了。

如果您的模式中有一个反斜杠来转义一个特殊的正则表达式字符(如 ),则必须在字符串中使用个反斜杠(因为是字符串中的转义字符):将与 相同。\(\new RegExp('\\(')/\(/

所以你的模式必须变成:

var pattern1 = ':\\(|:=\\(|:-\\(';
var pattern2 = ':\\(|:=\\(|:-\\(|:\\(|:=\\(|:-\\(';

答案 2

使用以下命令:

var regEx = new RegExp(pattern1+'|'+pattern2, 'gi');

str.match(regEx);