Passing regex modifier options to RegExp object

后端 未结 6 1760
陌清茗
陌清茗 2020-11-27 06:56

I am trying to create something similar to this:

var regexp_loc = /e/i;

except I want the regexp to be dependent on a string, so I tried to

相关标签:
6条回答
  • 2020-11-27 07:12

    When using the RegExp constructor, you don't need the slashes like you do when using a regexp literal. So:

    new RegExp(keyword, "i");
    

    Note that you pass in the flags in the second parameter. See here for more info.

    0 讨论(0)
  • 2020-11-27 07:14

    var keyword = "something";

    var test_regexp = new RegExp(something,"i");
    
    0 讨论(0)
  • 2020-11-27 07:19

    You need to pass the second parameter:

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

    You will also need to escape any special characters in the string to prevent regex injection attacks.

    0 讨论(0)
  • 2020-11-27 07:23

    Want to share an example here:

    I want to replace a string like: hi[var1][var2] to hi[newVar][var2]. and var1 are dynamic generated in the page.

    so I had to use:

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

    This works pretty good to me. in case anyone need this like me. The reason I have to go with [] is var1 might be a very easy pattern itself, adding the [] would be much accurate.

    0 讨论(0)
  • 2020-11-27 07:27

    You should also remember to watch out for escape characters within a string...

    For example if you wished to detect for a single number \d{1} and you did this...

    var pattern = "\d{1}";
    var re = new RegExp(pattern);
    
    re.exec("1"); // fail! :(
    

    that would fail as the initial \ is an escape character, you would need to "escape the escape", like so...

    var pattern = "\\d{1}" // <-- spot the extra '\'
    var re = new RegExp(pattern);
    
    re.exec("1"); // success! :D
    
    0 讨论(0)
  • 2020-11-27 07:36

    You need to convert RegExp, you actually can create a simple function to do it for you:

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

    and call it like:

    toReg("something")
    
    0 讨论(0)
提交回复
热议问题