代码之家  ›  专栏  ›  技术社区  ›  Prisoner ZERO

在regexp字符串中转义反斜杠[重复]

  •  2
  • Prisoner ZERO  · 技术社区  · 7 年前

    这个问题已经有了答案:

    我正试图在下列允许字符列表中添加反斜杠。它必须使用并传入,如下regexp字符串所示:

    我试过逃避,但没有成功:

    expandedText: function (e) {
    
            var regex = new RegExp("^[\\w., #&/-]+$");
            var key = String.fromCharCode(!e.charCode ? e.which : e.charCode);
    
            if (!regex.test(key)) {
                event.preventDefault();
                return false;
            }
        }
    
    2 回复  |  直到 7 年前
        1
  •  3
  •   JLRishe    7 年前

    因为是从字符串文字创建正则表达式,所以双反斜杠被解释为转义反斜杠 在字符串内 你就要结束这段正则表达式了:

    ^[\w., #&/-]+$
    

    这与单词字符匹配,但反斜杠却找不到。

    解决方法:去掉两个反斜杠,并为 \w ,导致六个反斜杠:

    var regex = new RegExp("^[\\\\\\w., #&/-]+$");
    

    或者更好的方法是,使用正则表达式文字,并且只使用三个反斜杠:

    var regex = /^[\\\w., #&/-]+$/;
    
        2
  •  1
  •   apsillers    7 年前

    除了转义正则表达式的反斜杠外,还必须转义字符串文本中的每个反斜杠。也就是说,字符串文字

    "\\"
    

    计算结果为由单个反斜杠组成的单字符字符串序列。由于在正则表达式中需要两个反斜杠来表示单个反斜杠,因此在字符串文本中需要四个反斜杠来表示正则表达式中的两个反斜杠:

    "\\\\"
    

    这表示正则表达式中的两个字符序列:一个反斜杠,前面是转义反斜杠,用于填充正则表达式。也就是说,这两个表达式(使用regex文本和 RegExp 构造函数)是等效的:

    /\\/
    new RegExp("\\\\")
    

    每个正则表达式对象都将匹配一个反斜杠。

    使用 小精灵 构造函数,您可以执行以下操作: new RegExp("^[\\\\\\w., #&/-]+$") ;但是,似乎regex文本会更干净、更短,没有缺点(因为您没有使用变化的字符串动态构建regex):

    var regex = /^[\\\w., #&/-]+$/