【问题标题】:Passing regex modifier options to RegExp object将正则表达式修饰符选项传递给 RegExp 对象
【发布时间】:2011-03-02 19:12:35
【问题描述】:

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

var regexp_loc = /e/i;

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

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

我尝试过这样的事情:

var keyword = "something";

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

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

问候, 亚历山大

【问题讨论】:

    标签: javascript regex string


    【解决方案1】:

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

    例如,如果您希望检测单个数字 \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 在他的例子。
    • 数小时试图让 RegExp 正常工作,最后得到了一个很棒的答案。错误是我一开始忘记了 \\,我只使用了一个。
    【解决方案2】:

    你需要通过second parameter:

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

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

    【讨论】:

    • 谢谢,我想我需要开始和结束斜线。 (>_
    • 如何传递多个标志,如 i 和 g?很久以来我一直在尝试这个。我尝试了“ig”,但只有 g 有效。我试过“i,g”,但它是无效的。我试过 ["i", "g"] 但它无效。怎么样?
    • 如果您需要在表达式前添加 ^ 怎么办。这个答案可能需要一些爱
    【解决方案3】:

    想在这里分享一个例子:

    我想将这样的字符串替换为:hi[var1][var2]hi[newVar][var2]。 和var1是在页面中动态生成的。

    所以我不得不使用:

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

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

    【讨论】:

      【解决方案4】:

      使用 RegExp 构造函数时,您不需要像使用 regexp 文字时那样使用斜杠。所以:

      new RegExp(keyword, "i");
      

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

      【讨论】:

      • 哈哈希望我在花一个小时拉头发之前看到这个。谢谢詹姆斯!
      【解决方案5】:

      var 关键字 = "某事";

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

      【讨论】:

        【解决方案6】:

        你需要转换RegExp,你实际上可以创建一个简单的函数来为你做:

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

        然后这样称呼它:

        toReg("something")
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-19
          • 2015-10-10
          • 1970-01-01
          相关资源
          最近更新 更多