我有这个正则表达式:
/[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
也不会消除语法突出显示问题。
答案 0 :(得分:2)
在JavaScript正则表达式文字中转义正斜杠的正确方法是使用反斜杠:
// unescaped:
some/string
// escaped in regex literal:
/some\/string/
没有我知道的边缘情况,如果你不这样做,你会收到错误。
当你使用new RegExp()
时,你应该传递一个字符串,而不是一个正则表达式对象,那就是你应该使用new RegExp("/[a-z0- etc")
形式 - 这应该修复语法高亮,但当然要注意字符串文字也有需要转义的字符,包括所有反斜杠。考虑到在正则表达式中使用反斜杠的频率,这意味着字符串形式非常难看,所以它通常只在需要动态构建正则表达式的地方使用。