来自字符串的javascript new regexp

Ale*_*der 57 javascript regex string

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

var regexp_loc = /e/i;
Run Code Online (Sandbox Code Playgroud)

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

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

我试过这样的事情:

var keyword = "something";

var test_regexp = new RegExp("/" + keyword + "/i");
Run Code Online (Sandbox Code Playgroud)

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

亚历山大

SLa*_*aks 76

您需要传递第二个参数:

var r = new RegExp(keyword, "i");
Run Code Online (Sandbox Code Playgroud)

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

  • 如何传递像i和g这样的多个标志?我很久以来一直在尝试这个.我试过"ig",但只有g工作.我试过"i,g",但它无效.我试过["我","g"],但它无效.怎么样? (4认同)

小智 46

你还应该记得要注意字符串中的转义字符......

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

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

re.exec("1"); // fail! :(
Run Code Online (Sandbox Code Playgroud)

因为最初的\是一个转义字符会失败,你需要"逃避逃脱",就像这样......

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

re.exec("1"); // success! :D
Run Code Online (Sandbox Code Playgroud)


Jam*_*lak 11

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

new RegExp(keyword, "i");
Run Code Online (Sandbox Code Playgroud)

请注意,您传入第二个参数中的标志.有关详细信息,请参见此处