如何构建两个正则表达式模式?Javascript Regexp从变量动态生成?
例如我有一个较长的图案和一个较小的图案,我需要在较长的图案前放一个较小的图案。
var pattern1 = ':\(|:=\(|:-\(';
var pattern2 = ':\(|:=\(|:-\(|:\(|:=\(|:-\('
str.match('/'+pattern1+'|'+pattern2+'/gi');
这是行不通的。当我连接字符串时,所有斜杠都消失了。
如何构建两个正则表达式模式?Javascript Regexp从变量动态生成?
例如我有一个较长的图案和一个较小的图案,我需要在较长的图案前放一个较小的图案。
var pattern1 = ':\(|:=\(|:-\(';
var pattern2 = ':\(|:=\(|:-\(|:\(|:=\(|:-\('
str.match('/'+pattern1+'|'+pattern2+'/gi');
这是行不通的。当我连接字符串时,所有斜杠都消失了。
你必须使用RegExp
:
str.match(new RegExp(pattern1+'|'+pattern2, 'gi'));
当我连接字符串,所有斜线都不见了。
如果你有你的格局反斜线转义特殊的正则表达式字符(如\(
),您必须在字符串中使用反斜杠(因为\
是转义字符的字符串):new RegExp('\\(')
将与/\(/
相同。
所以你的模式有可能成为:
var pattern1 = ':\\(|:=\\(|:-\\(';
var pattern2 = ':\\(|:=\\(|:-\\(|:\\(|:=\\(|:-\\(';
使用如下:
var regEx = new RegExp(pattern1+'|'+pattern2, 'gi');
str.match(regEx);
你已经放弃了正则表达式字面和使用对象的构造函数,在那里你可以通过正则表达式作为串。
var regex = new RegExp(pattern1+'|'+pattern2, 'gi');
str.match(regex);
RegExp构造函数创建一个正则表达式对象,用于将文本与模式进行匹配。
var pattern1 = ':\\(|:=\\(|:-\\(';
var pattern2 = ':\\(|:=\\(|:-\\(|:\\(|:=\\(|:-\\(';
var regex = new RegExp(pattern1 + '|' + pattern2, 'gi');
str.match(regex);
上面的代码工作完美的我...
应该不是' '/''使用'新的RegExp(...)'时被删除? –
@BartKiers伟大的一点!常见的错误 ! x)值得在某处添加一个大通知:) –