Javascript Regexp 从变量动态生成?

IT技术 javascript regex dynamic
2021-01-23 10:19:42

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

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

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

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

4个回答

你必须使用RegExp

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

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

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

所以你的模式必须变成:

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

使用以下:

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

str.match(regEx);
'/'使用时应该删除new RegExp(...)吗?
2021-04-03 10:19:42
@BartKiers 很棒的一点!常见的错误 !x) 值得在某处添加一个大通知:)
2021-04-07 10:19:42

您必须放弃正则表达式文字并使用对象构造函数,您可以在其中将正则表达式作为字符串传递。

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);

上面的代码非常适合我......