在Javascript正则表达式中使用的转义字符串[重复]

2020/09/25 01:00 · javascript ·  · 0评论

可能重复:
Javascript中是否存在RegExp.escape函数?

我正在尝试根据用户输入构建JavaScript正则表达式:

函数FindString(input){
    var reg = new RegExp(''+ input +'');
    // [snip]执行搜索
}

但是,当用户输入包含?时,则正则表达式将无法正常工作,*因为它们被解释为正则表达式特殊字符实际上,如果用户在字符串中放置不平衡([正则表达式,则正则表达式甚至无效。

什么是可以正确转义要在正则表达式中使用的所有特殊字符的javascript函数?

短'n甜

function escapeRegExp(string) {
  return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
}

escapeRegExp("All of these should be escaped: \ ^ $ * + ? . ( ) | { } [ ]");

>>> "All of these should be escaped: \\ \^ \$ \* \+ \? \. \( \) \| \{ \} \[ \] "

:上面是不是原来的答案,它被编辑以显示从MDN一个,这意味着它不。匹配,你会在下面NPM的代码查找,一点匹配什么是在下面长所示我的建议:使用上面的内容,或从MDN中获取它,然后忽略此答案的其余部分。-Darren,Nov 2019)

安装

在npm上可以作为转义字符串-regexp使用

npm install --save escape-string-regexp

注意

请参见MDN:Javascript指南:正则表达式

其他符号(〜`!@#...)可以无意转义,但不是必须的。

测试案例:一个典型的URL

escapeRegExp("/path/to/resource.html?search=query");

>>> "\/path\/to\/resource\.html\?search=query"

长答案

如果您要使用上面的函数,请至少链接到代码文档中的此堆栈溢出文章,以免看起来像疯狂的难以测试的伏都教。

var escapeRegExp;

(function () {
  // Referring to the table here:
  // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/regexp
  // these characters should be escaped
  // \ ^ $ * + ? . ( ) | { } [ ]
  // These characters only have special meaning inside of brackets
  // they do not need to be escaped, but they MAY be escaped
  // without any adverse effects (to the best of my knowledge and casual testing)
  // : ! , = 
  // my test "~!@#$%^&*(){}[]`/=?+\|-_;:'\",<.>".match(/[\#]/g)

  var specials = [
        // order matters for these
          "-"
        , "["
        , "]"
        // order doesn't matter for any of these
        , "/"
        , "{"
        , "}"
        , "("
        , ")"
        , "*"
        , "+"
        , "?"
        , "."
        , "\\"
        , "^"
        , "$"
        , "|"
      ]

      // I choose to escape every character with '\'
      // even though only some strictly require it when inside of []
    , regex = RegExp('[' + specials.join('\\') + ']', 'g')
    ;

  escapeRegExp = function (str) {
    return str.replace(regex, "\\$&");
  };

  // test escapeRegExp("/path/to/res?search=this.that")
}());
本文地址:http://javascript.askforanswer.com/zaijavascriptzhengzebiaodashizhongshiyongdezhuanyizifuchuanzhongfu.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!