<分区>
如何将两个正则表达式模式组合成一个?
比如我有一个长的图案和一个小的图案,我需要把小的放在长的前面。
var pattern1 = ':\(|:=\(|:-\(';
var pattern2 = ':\(|:=\(|:-\(|:\(|:=\(|:-\('
str.match('/'+pattern1+'|'+pattern2+'/gi');
这行不通。当我连接字符串时,所有斜线都消失了。
<分区>
如何将两个正则表达式模式组合成一个?
比如我有一个长的图案和一个小的图案,我需要把小的放在长的前面。
var pattern1 = ':\(|:=\(|:-\(';
var pattern2 = ':\(|:=\(|:-\(|:\(|:=\(|:-\('
str.match('/'+pattern1+'|'+pattern2+'/gi');
这行不通。当我连接字符串时,所有斜线都消失了。
最佳答案
你必须使用 RegExp
:
str.match(new RegExp(pattern1+'|'+pattern2, 'gi'));
When I'm concatenating strings, all slashes are gone.
如果您的模式中有反斜杠来转义特殊的正则表达式字符(如 \(
),您必须在字符串中使用两个反斜杠(因为 \
是字符串中的转义符):new RegExp('\\(')
与 /\(/
.
所以你的模式必须变成:
var pattern1 = ':\\(|:=\\(|:-\\(';
var pattern2 = ':\\(|:=\\(|:-\\(|:\\(|:=\\(|:-\\(';
关于从变量动态生成 Javascript 正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5090103/