Javascript Regexp从变量动态生成?

Som*_*ody 104 javascript regex dynamic

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

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

var pattern1 = ':\(|:=\(|:-\(';
var pattern2 = ':\(|:=\(|:-\(|:\(|:=\(|:-\('
str.match('/'+pattern1+'|'+pattern2+'/gi');
Run Code Online (Sandbox Code Playgroud)

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

Fel*_*ing 186

你必须使用RegExp:

str.match(new RegExp(pattern1+'|'+pattern2, 'gi'));
Run Code Online (Sandbox Code Playgroud)

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

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

所以你的模式必须成为:

var pattern1 = ':\\(|:=\\(|:-\\(';
var pattern2 = ':\\(|:=\\(|:-\\(|:\\(|:=\\(|:-\\(';
Run Code Online (Sandbox Code Playgroud)


ada*_*shr 21

使用以下:

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

str.match(regEx);
Run Code Online (Sandbox Code Playgroud)

  • 当使用`new RegExp(...)`时,不应该删除`'/'` (7认同)

ale*_*lex 10

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

var regex = new RegExp(pattern1+'|'+pattern2, 'gi');
str.match(regex);
Run Code Online (Sandbox Code Playgroud)