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);
上面的代码完全适合我…