javascript - 使用 "new RegExp"和使用正斜杠符号创建正则表达式有什么区别?

标签 javascript regex slash

使用 new RegExp("regex");/same_regex/ 来测试目标字符串有什么区别吗?我问这个问题是因为我在使用这两种方法时得到了不同的验证结果。这是我用来验证电子邮件字段的片段:


var email="didxga@gmail.comblah@foo.com";

var regex1 = 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])?$"); 

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

//using RegExp object
if(regex1.test(email))  {
       console.log("email matched regex1");    
  } else {
       console.log("email mismatched regex1");   
  }
//using slash notation
if(regex2.test(email))  {
       console.log("email matched regex2");   
  } else {  
       console.log("email mismatched regex2");
  }

我得到了两个不一致的结果:


email matched regex1
email mismatched regex2

我想知道这里是否有任何区别,或者我在这个特定示例中遗漏了什么?
有关可执行示例,请参阅 here

最佳答案

如果您使用构造函数创建一个新的 RegExp 对象而不是文字语法,您需要正确转义 \‍:

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 中任何未知的转义序列 \x 都被解释为 x。所以在这种情况下,\. 被解释为 ..

关于javascript - 使用 "new RegExp"和使用正斜杠符号创建正则表达式有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6149770/

相关文章:

php - 无法使用 jQuery 获取复选框的值

javascript - iOS UIAutomation UIAElement.isVisible() 抛出陈旧的响应?

javascript - javascript正则表达式用连字符替换空格

php -/file.php 到/file/试试

javascript - 我可以控制网络浏览器的加载图标吗?

Javascript 从匿名函数外部访问变量

r - 使用 gsub 提取第一个整数

c# - 从字符串的开头和结尾删除 BR 标记

windows - 在 Windows 上运行 bash 脚本时,Git Bash 与 Slash '/' 混淆

javascript - javascript中的斜线转义