我应该如何转义这个JavaScript正则表达式(RFC 2822电子邮件验证器)

How should I escape this JavaScript regex (RFC 2822 email validator)

本文关键字:RFC 正则表达式 2822 电子邮件 验证 JavaScript 何转义 转义 我应该      更新时间:2023-09-26

我有这个正则表达式:

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

我正在逃离这样的斜杠:

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

这似乎很好,但我担心我错过了一个边缘案例,并且这样做会破坏正则表达式。这是躲避斜杠的正确方法吗?

或者我应该用new这样声明:

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

JavaScript执行正确,没有转义斜杠(在Chrome中),但它扰乱了我的编辑器(TextMate)的语法高亮显示。在进一步的测试中,即使是new也不能消除语法突出显示的问题。

在JavaScript正则表达式文本中转义正斜杠的正确方法是使用反斜杠:

// unescaped:
some/string
// escaped in regex literal:
/some'/string/

我知道没有边缘情况,如果你不这样做,你应该会得到一个错误。

当您使用new RegExp()时,您应该向它传递一个字符串,而不是regex对象,也就是说,您应该使用形式new RegExp("/[a-z0- etc")-这应该修复语法高亮显示,但请注意,字符串文字也有需要转义的字符,包括所有反斜杠。考虑到正则表达式中反斜杠的使用频率,这意味着字符串形式非常难看,因此它通常只用于需要动态构建正则表达式的地方。