Javascript Regexp dynamic generation from variables?
本问题已经有最佳答案,请猛点这里访问。
如何将两个regex模式构造为一个?
例如,我有一个长的图案和一个小的,我需要把小的放在长的前面。
1 2 3 | var pattern1 = ':\(|:=\(|:-\('; var pattern2 = ':\(|:=\(|:-\(|:\(|:=\(|:-\(' str.match('/'+pattern1+'|'+pattern2+'/gi'); |
这不管用。当我连接字符串时,所有斜线都消失了。
您必须使用
1 | str.match(new RegExp(pattern1+'|'+pattern2, 'gi')); |
When I'm concatenating strings, all slashes are gone.
如果您的模式中有一个反斜杠来转义一个特殊的regex字符(如
所以你的模式必须成为:
1 2 | var pattern1 = ':\\(|:=\\(|:-\\('; var pattern2 = ':\\(|:=\\(|:-\\(|:\\(|:=\\(|:-\\('; |
使用以下内容:
1 2 3 | var regEx = new RegExp(pattern1+'|'+pattern2, 'gi'); str.match(regEx); |
您必须放弃regex文本并使用对象构造函数,在这里您可以将regex作为字符串传递。
1 2 | var regex = new RegExp(pattern1+'|'+pattern2, 'gi'); str.match(regex); |
regexp构造函数创建用于将文本与模式匹配的正则表达式对象。
1 2 3 4 | var pattern1 = ':\\(|:=\\(|:-\\('; var pattern2 = ':\\(|:=\\(|:-\\(|:\\(|:=\\(|:-\\('; var regex = new RegExp(pattern1 + '|' + pattern2, 'gi'); str.match(regex); |
上面的代码非常适合我…