did*_*xga 16 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
我想知道这里是否有任何差异,或者我在这个具体例子中省略了什么?
有关可执行示例,请参阅此处
Gum*_*mbo 13
如果使用构造函数创建新的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])?$")
Run Code Online (Sandbox Code Playgroud)
这是必要的,因为在JavaScript中任何未知的转义序列都\x被解释为x.所以在这种情况下,它\.被解释为..
Koo*_*Inc 11
/.../被称为正则表达式文字.new RegExp使用RegExp构造函数并创建正则表达式对象.
正则表达式文字在评估脚本时提供正则表达式的编译.当正则表达式保持不变时,使用它来获得更好的性能.
使用构造函数提供正则表达式的运行时编译.当您知道正则表达式模式将要更改时,或者您不知道该模式并从其他源(例如用户输入)获取该模式时,请使用构造函数.
| 归档时间: |
|
| 查看次数: |
4128 次 |
| 最近记录: |