1

我正在使用 RFC 中的确切电子邮件正则表达式模式

 [a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?

然而

当我将其粘贴到 vs 时:

var emailPattern = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/i;

它显示错误:http: //i.stack.imgur.com/UkJJE.jpg

在此处输入图像描述

未确定的字符串常量

如何消除此错误?

4

1 回答 1

3

/如果您决定使用 / 作为分隔符,我认为您需要在您的正则表达式中转义,因此将正则表达式中的每次/出现替换为\/.

问题是,因为第一个和最后一个/在这里指示您正则表达式真正开始的位置和真正结束的位置,您需要/在正则表达式内部转义,以便解析器了解在哪里停止。

这应该工作:

var emailPattern = /[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/i;

正如您在评论中指出的那样,使用该构造new Regexp("...")可以让您构建正则表达式而不必逃避。

两种构造是等价的。更多信息在这里

于 2013-02-08T21:52:59.647 回答