Javascript正则expression式dynamic生成variables?

如何构build两个正则expression式模式?

例如,我有一个较长的模式,一个较小的模式,我需要把较小的模式放在较长的模式之前。

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

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

您必须使用RegExp

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

当我连接string时,所有的斜线都消失了。

如果你的模式中有一个反斜杠来转义一个特殊的正则expression式(比如\( ),你必须在string中使用两个反斜杠(因为\是string中的转义字符): new RegExp('\\(')将和/\(/

所以你的模式必须成为:

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

使用以下内容:

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

您必须放弃正则expression式文字,并使用对象构造函数,您可以将正则expression式作为string传递。

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

RegExp构造函数创build一个正则expression式对象,用于将文本与模式进行匹配。

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

上面的代码完全适合我…