从变量动态生成?

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

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

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

这样不行,当我连接字符串时,所有的斜杠都消失了。

141831 次浏览

你必须使用 RegExp:

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

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

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

因此,你的模式必须成为:

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

使用以下方法:

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


str.match(regEx);

您必须放弃 regex 文本并使用对象构造函数,在这里您可以将 regex 作为字符串传递。

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

RegExp 构造函数创建一个正则表达式对象,用于将文本与模式匹配。

    var pattern1 = ':\\(|:=\\(|:-\\(';
var pattern2 = ':\\(|:=\\(|:-\\(|:\\(|:=\\(|:-\\(';
var regex = new RegExp(pattern1 + '|' + pattern2, 'gi');
str.match(regex);

以上代码对我来说完全可行..。