来自字符串的javascript new regexp

时间:2011-03-02 19:12:35

标签: javascript regex string

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

var regexp_loc = /e/i;

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

基本上我希望上面的regexp中的e是一个字符串变量,但是我的语法失败了。

我试过这样的事情:

var keyword = "something";

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

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

的问候, 亚历山大

6 个答案:

答案 0 :(得分:73)

您需要传递second parameter

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

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

答案 1 :(得分:43)

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

例如,如果您希望检测单个数字\ 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

答案 2 :(得分:11)

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

new RegExp(keyword, "i");

请注意,您传入第二个参数中的标志。有关详细信息,请参阅here

答案 3 :(得分:1)

想在此处分享一个示例: 我想将一个字符串替换为:hi [var1] [var2]到hi [newVar] [var2]。 和var1是在页面中动态生成的。

所以我不得不使用: var regex = new RegExp(“\\ [”+ var1 +“\\]”,'ig'); mystring.replace(正则表达式, '[newVar]');

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

答案 4 :(得分:0)

var keyword =&#34;某事&#34 ;;

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

答案 5 :(得分:0)

您需要转换 RegExp ,实际上您可以创建一个简单的函数来为您完成此操作:

function toReg(str) {
  if(!str || typeof str !== "string") {
    return;
  }
  return new RegExp(str, "i");
}

并这样称呼它:

toReg("something")
相关问题