Javascript 将正则表达式修改器选项传递给正则表达式对象

Javascript 将正则表达式修改器选项传递给正则表达式对象,javascript,regex,string,Javascript,Regex,String,我试图创造类似的东西: var regexp_loc = /e/i; 除了我希望regexp依赖于字符串之外,所以我尝试使用新的regexp,但无法得到我想要的 基本上,我希望上述regexp中的e是一个字符串变量,但语法失败 我试过这样的方法: var keyword = "something"; var test_regexp = new RegExp("/" + keyword + "/i"); 基本上,我想在一个较大的字符串中搜索一个子字符串,然后用其他字符串替换该字符串,不区分大

我试图创造类似的东西:

var regexp_loc = /e/i;
除了我希望regexp依赖于字符串之外,所以我尝试使用新的regexp,但无法得到我想要的

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

我试过这样的方法:

var keyword = "something";

var test_regexp = new RegExp("/" + keyword + "/i");
基本上,我想在一个较大的字符串中搜索一个子字符串,然后用其他字符串替换该字符串,不区分大小写

问候,, alexander

您需要通过以下考试:


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

使用正则表达式构造函数时,您不需要像使用正则表达式文本时那样使用斜杠。因此:

new RegExp(keyword, "i");

请注意,在第二个参数中传入标志。有关更多信息,请参阅。

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

例如,如果您希望检测单个数字\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
var-pattern=“\\d{1}”//var-keyword=“something”


想在这里分享一个例子:

我想将如下字符串替换为
hi[var1][var2]
hi[newVar][var2]
。 和
var1
在页面中动态生成

所以我不得不使用:

var regex = new RegExp("\\\\["+var1+"\\\\]",'ig');
mystring.replace(regex,'[newVar]');
这对我很有效。万一有人像我一样需要这个。
我必须使用[]的原因是var1本身可能是一个非常简单的模式,添加[]将非常准确。

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

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

toReg("something")

谢谢,我想我需要开始和结束的斜线。(>\我如何传递多个标志,如I和g?我已经尝试了很久。我尝试了“ig”,但只有g起作用。我尝试了“I,g”,但无效。我尝试了[“I”,“g”]但是它是无效的。怎么做?如果你需要在表达式前加上^怎么办?这个答案可能需要一些Love我在使用字符串创建模式时被双转义码咬了一口。我很高兴我发现了这一点。还有一件事让我大吃一惊,如果以“/”开头和结尾,输入到RegExp对象的模式的字符串版本将不起作用.js中的正则表达式可能是var pattern=/\d{1}/,不需要引号,但一旦转换为字符串,它将成为var patternString=“\\d{1}”,就像Ric在他的例子中所说的那样。花了几个小时试图让RegExp正常工作,最后得到了一个非常棒的答案。错误是我忘记了\\在开始时,我只使用了一个。哈哈,我希望在花一个小时把头发拔出来之前看到这个。谢谢James!
function toReg(str) {
  if(!str || typeof str !== "string") {
    return;
  }
  return new RegExp(str, "i");
}
toReg("something")