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)
ale*_*lex 10
您必须放弃正则表达式文字并使用对象构造函数,您可以将正则表达式作为字符串传递.
var regex = new RegExp(pattern1+'|'+pattern2, 'gi');
str.match(regex);
Run Code Online (Sandbox Code Playgroud)