JS,RegExp,奇怪的行为

时间:2016-05-07 23:35:50

标签: javascript regex

我使用简单的正则表达式模式验证电子邮件地址,我发现了这种模式:

^[^@]+@[^@]+\.[^@]+$

当我检查regex101上的模式时,它的行为符合预期(意味着它不会匹配,例如email@abcde)。

以下一行:

/^[^@]+@[^@]+\.[^@]+$/.test('email@abcde'); // false

可是:

let patt = new RegExp('^[^@]+@[^@]+\.[^@]+$');
patt.test('email@abcde'); // true

什么?!,我在chrome和firefox上测试过,同样的行为,任何人都可以解释一下吗?

2 个答案:

答案 0 :(得分:0)

\.不是字符串文字中的有效转义序列,它只是解析为.。这意味着您在第二个示例中使用的正则表达式等同于

^[^@]+@[^@]+.[^@]+$

.匹配任何角色。

如果将两个正则表达式都记录到控制台,则可以轻松查看差异:

enter image description here

答案 1 :(得分:0)

问题是您的正则表达式中\.被评估为.。换句话说,您的正则表达式实际上是:^[^@]+@[^@]+.[^@]+$

要修复,请使用//正则表达式分隔符:

patt = /^[^@]+@[^@]+\.[^@]+$/
patt.test("email@abcde") // false
patt.test("email@abcde.com")  // true