RegEx javascript 不正确匹配

Bri*_*der 5 javascript regex

我有一个小的 javascript 函数:

function GetFilteredListLimited(event) {
    var $source = $(event.target);
    var $Pattern = event.data.Pattern;
    var RE = new RegExp($Pattern, 'i');
    if (RE.test($source.val())) {
        console.log('RegEx match');
    }
};
Run Code Online (Sandbox Code Playgroud)

使用的模式是:

^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$
Run Code Online (Sandbox Code Playgroud)

这应该与大多数电子邮件地址匹配。

使用http://regexpal.com/我可以看到该模式是正确的。但由于某种奇怪的原因,脚本已经匹配@之后的第四个字符

abc@abcd 不应给出匹配项,但确实如此。有什么建议 ?

Wik*_*żew 2

您需要了解RegExp构造函数,其中转义字符必须进行两次转义。因此,传递给 RegExp 构造函数的正则表达式字符串应如下所示:

^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$
Run Code Online (Sandbox Code Playgroud)

修复可以这样引入:

var RE = new RegExp($Pattern.replace(/\\/g, '\\\\'), 'i');
Run Code Online (Sandbox Code Playgroud)

如果一致地使用转义符号,它将起作用。