在RegExp字符串中转义反斜杠

时间:2018-06-06 18:45:53

标签: javascript regex

我正在尝试在以下允许字符列表中添加反斜杠。它必须使用&传入,如下面的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 个答案:

答案 0 :(得分:3)

因为您正在从字符串文字创建RegEx,所以双反斜杠被解释为字符串中的转义反斜杠,并且您将使用此RegEx结束:

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

这匹配单词字符,但无法找到反斜杠。

解决方案:转义两个反斜杠,并为\w添加一个,产生六个反斜杠:

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

甚至更好,使用正则表达式文字,只使用三个反斜杠:

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

答案 1 :(得分:1)

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

"\\"

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

"\\\\"

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

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

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

使用RegExp构造函数,您可以:new RegExp("^[\\\\\\w., #&/-]+$");然而,似乎正则表达式字面值更清晰,更短,没有缺点(因为你不使用变化的字符串动态构建你的正则表达式):

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