[] in regex Javascript中的Hashtag

时间:2015-09-26 01:23:30

标签: javascript

我在codeacademy.com上做这个练习,我偶然发现了这个没有任何意义的练习。当我尝试在第一个[]中包含#标签时,它发出错误。我不确定为什么。

//change the regexp to have only good message

var emailregexp = /[a-z0-9._%+-#]+@[a-z0-9.-]+\.[a-z]{2,4}/;
console.log(emailregexp.test("michael.courcy@microsoft.com")?"good":"bad");
console.log(emailregexp.test("michael.courcy@gmail.com")?"good":"bad");
console.log(emailregexp.test("###mic###@microsoft.com")?"good":"bad");

输出

error

3 个答案:

答案 0 :(得分:2)

您需要在-之前转义#,否则它会认为您要提供范围,例如0-9

[a-z0-9._%+\-#]

所以它看起来像:

var emailregexp = /[a-z0-9._%+\-#]+@[a-z0-9.-]+\.[a-z]{2,4}/;

答案 1 :(得分:2)

因为#不在Unicode表中的+之后。

方括号内的

+-#范围(从+#)。如果您希望短划线成为单独的字符,请使用\-或将其移至括号的末尾:+#-]

答案 2 :(得分:0)

错误是这样的:

  

SyntaxError:无效的正则表达式:   /[a-z0-9._%+-#]+@[a-z0-9.-]+.[a-z]{2,4}/:范围乱序   字符类

问题是之前的 - (破折号)。 JavaScript正在尝试定义一个范围,其中包含 + (加号)和之间的所有字符,这些字符无效。

交换 - ,如下所示:

var emailregexp = /^[a-z0-9._%+-#]+@[a-z0-9\.-]+\.[a-z]{2,4}$/i;

另请注意开头的插入符号锚点和结尾处的 $ 。这表示内容必须从头到尾匹配,没有 ^ $ ,任何包含电子邮件地址的字符串都将匹配。

您可能希望 i 标志允许使用大写字母。