从变量动态生成 Javascript 正则表达式?

标签 javascript regex dynamic

<分区>

如何将两个正则表达式模式组合成一个?

比如我有一个长的图案和一个小的图案,我需要把小的放在长的前面。

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/

相关文章:

javascript - 如何计算Jquery中文本行的宽度?

javascript - 替换字符串中多次出现的缩写

Javascript 替换西里尔文中的单词(不是单词的一部分)

regex - 通过 vimscript 替换正则表达式

Android在动态 View 中只获得一次动画效果

.net - 我无法访问 Razor 模板中的动态对象属性

javascript - 页面加载时,检查条件并在 Angular JS 中显示模式弹出窗口

javascript - "new window"表单示例如何生效

javascript - jQuery slideUp 然后在鼠标悬停时 slideDown

javascript - 如何将整个 SVG 图像文件夹(或如何动态加载它们)导入 React Web App?