我应该如何转义这个JavaScript正则表达式(RFC 2822电子邮件验证器)
How should I escape this JavaScript regex (RFC 2822 email validator)
我有这个正则表达式:
/[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")
-这应该修复语法高亮显示,但请注意,字符串文字也有需要转义的字符,包括所有反斜杠。考虑到正则表达式中反斜杠的使用频率,这意味着字符串形式非常难看,因此它通常只用于需要动态构建正则表达式的地方。
相关文章:
- java.net和javascript之间正则表达式的差异
- Grunt匹配正则表达式
- 不同浏览器中的空白字符正则表达式行为
- 正则表达式在字符串中找到base64
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 调用正则表达式匹配的函数
- 使用正则表达式评估电子邮件地址时出现性能问题
- Javascript 正则表达式 : ^[^/s/]+[a-z]{1,}[0-9]*[-_]*[^/][
- JavaScript正则表达式文本与RegExp对象
- 正则表达式只允许 x 个整数
- 使用正则表达式将输入格式设置为单字符逗号、单字符逗号等
- 改进用于验证付款金额的正则表达式
- 正则表达式与数字中的第二个点匹配
- 键按正则表达式以查找具有负值的小数
- 一个正则表达式,用于从JS中的HTML标记中删除id、样式和类属性
- 将po-box javascript正则表达式转换为c#regex
- 在mongoose中使用正则表达式在对象数组中进行查询搜索
- 使用正则表达式捕获“”并分割成阵列
- 我应该如何转义这个JavaScript正则表达式(RFC 2822电子邮件验证器)
- RFC 2822和ISO 8601日期格式正则表达式