ChatGPT解决这个技术问题 Extra ChatGPT

Javascript Regexp从变量动态生成? [复制]

这个问题在这里已经有了答案:How do you use a variable in a regular expression? (23 个回答) 4 年前关闭。

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

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

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

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


F
Felix Kling

您必须使用 RegExp

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

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

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

所以你的模式必须变成:

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

a
adarshr

使用以下内容:

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

str.match(regEx);

使用 new RegExp(...) 时不应该删除 '/' 吗?
@BartKiers 好点!常见的错误 ! x)值得在某处添加一个大通知:)
a
alex

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

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

V
Vinoth Narayan

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

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

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