关于正则表达式:Javascript Regexp从变量动态生成?

Javascript Regexp dynamic generation from variables?

本问题已经有最佳答案,请猛点这里访问。

如何将两个regex模式构造为一个?

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

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

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


您必须使用RegExp

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

When I'm concatenating strings, all slashes are gone.

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

所以你的模式必须成为:

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

使用以下内容:

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

str.match(regEx);


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

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

regexp构造函数创建用于将文本与模式匹配的正则表达式对象。

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

上面的代码非常适合我…