这个问题在这里已经有了答案:How do you use a variable in a regular expression? (23 个回答) 4 年前关闭。
如何将两个正则表达式模式构建为一个?
例如,我有一个长图案和一个较小的图案,我需要将较小的图案放在长图案的前面。
var pattern1 = ':\(|:=\(|:-\(';
var pattern2 = ':\(|:=\(|:-\(|:\(|:=\(|:-\('
str.match('/'+pattern1+'|'+pattern2+'/gi');
这行不通。当我连接字符串时,所有斜线都消失了。
您必须使用 RegExp
:
str.match(new RegExp(pattern1+'|'+pattern2, 'gi'));
当我连接字符串时,所有斜线都消失了。
如果您的模式中有反斜杠来转义特殊的正则表达式字符(如 \(
),则必须在字符串中使用 两个 反斜杠(因为 \
是字符串中的转义字符): new RegExp('\\(')
与 /\(/
相同。
所以你的模式必须变成:
var pattern1 = ':\\(|:=\\(|:-\\(';
var pattern2 = ':\\(|:=\\(|:-\\(|:\\(|:=\\(|:-\\(';
使用以下内容:
var regEx = new RegExp(pattern1+'|'+pattern2, 'gi');
str.match(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);
上面的代码非常适合我......
new RegExp(...)
时不应该删除'/'
吗?