为什么这个特殊的正则表达式不适用于JavaScript?

时间:2012-01-26 15:11:53

标签: javascript regex

我在Javascript上有this正则表达式:

var myString="aaa@aaa.com";
var mailValidator = new RegExp("\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*");
if (!mailValidator.test(myString))
{
    alert("incorrect");
}

但不应警告aaa@aaa.com“不正确”。

它应该为aaaaaa.com返回“不正确”(例如)。

我哪里错了?

3 个答案:

答案 0 :(得分:2)

当你从一个字符串创建一个正则表达式时,你必须考虑到这样一个事实,即解析器会在之前从字符串中去掉反斜杠,因为它有机会被解析为正则表达式。< / p>

因此,到RegExp()构造函数开始工作时,所有\w标记都已在字符串常量中更改为普通的“w”。您可以将反斜杠加倍,以便字符串解析只留下一个,或者您可以使用本机正则表达式常量语法。

答案 1 :(得分:1)

如果您do this

,则有效
var mailValidator = /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/;

你的内容是你需要双重转义反斜杠,因为它们在一个字符串中,如"\\w+([-+.]\\w+)*...etc

Here's a link that explains it(在“如何使用JavaScript RegExp对象”部分中)。

答案 2 :(得分:1)

尝试var mailValidator = new RegExp("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");