将正则表达式修饰符选项传递给 RegExp 对象

IT技术 javascript regex string
2021-02-02 17:22:00

我正在尝试创建类似的东西:

var regexp_loc = /e/i;

除了我希望 regexp 依赖于一个字符串,所以我尝试使用新的 RegExp 但我无法得到我想要的。

基本上我希望e上面的正则表达式是一个字符串变量,但我的语法失败了。

我试过这样的事情:

var keyword = "something";

var test_regexp = new RegExp("/" + keyword + "/i");

基本上我想在一个更大的字符串中搜索一个子字符串,然后用其他一些字符串替换该字符串,不区分大小写。

问候, 亚历山大

6个回答

您需要传递第二个参数

var r = new RegExp(keyword, "i");

您还需要转义字符串中的任何特殊字符以防止正则表达式注入攻击。

如果您需要在表达式前添加 ^ 呢?这个答案可能需要一些爱
2021-03-21 17:22:00
如何传递多个标志,如 i 和 g?我已经尝试了很长时间了。我试过“ig”,但只有 g 有效。我试过 "i,g" 但它是无效的。我试过 ["i", "g"] 但它无效。如何?
2021-03-28 17:22:00
谢谢,以为我需要开头和结尾的斜线。(>_<)
2021-04-02 17:22:00

您还应该记住注意字符串中的转义字符...

例如,如果您希望检测单个数字 \d{1} 并且您这样做了...

var pattern = "\d{1}";
var re = new RegExp(pattern);

re.exec("1"); // fail! :(

这会失败,因为初始 \ 是转义字符,您需要“转义”,就像这样......

var pattern = "\\d{1}" // <-- spot the extra '\'
var re = new RegExp(pattern);

re.exec("1"); // success! :D
另一件事让我感到困惑,如果您以 "/" 开头和结尾,则提供给 RegExp 对象的模式的字符串版本将不起作用。js 中的正则表达式可能是 var pattern = /\d{1}/ ,不需要引号,但是一旦转换为字符串,它就会变成 var patternString = "\\d{1}" ,就像 Ric 在他的例子。
2021-03-28 17:22:00
几个小时试图让 RegExp 工作,最后一个很棒的答案。错误是我一开始忘记了 \\,我只使用了一个。
2021-03-28 17:22:00
在使用字符串创建模式时,我被双重转义所困扰。我很高兴我找到了这个。
2021-04-04 17:22:00

使用 RegExp 构造函数时,您不需要像使用正则表达式文字时那样的斜线。所以:

new RegExp(keyword, "i");

请注意,您在第二个参数中传递了标志。请参阅此处了解更多信息。

哈哈真希望我能在花一个小时拔头发之前看到这个。谢谢詹姆斯!
2021-04-04 17:22:00

想在这里分享一个例子:

我想替换一个字符串,如:hi[var1][var2]to hi[newVar][var2]并且var1是在页面中动态生成的。

所以我不得不使用:

var regex = new RegExp("\\\\["+var1+"\\\\]",'ig');
mystring.replace(regex,'[newVar]');

这对我来说很好用。以防有人像我一样需要这个。我必须使用 [] 的原因是 var1 本身可能是一个非常简单的模式,添加 [] 会更准确。

var 关键字 = "东西";

var test_regexp = new RegExp(something,"i");