为什么字符类中的句点不只与文字句点匹配

时间:2019-05-30 15:18:39

标签: javascript regex

console.log("<p>email@address.com</p>".match(/([a-zA-Z0-9.-_+]+@[a-zA-Z0-9.-]+\.[a-z]{2,10})/g))
  

["<p>email@address.com"]

有人可以帮助我理解为什么< >字符与该正则表达式匹配吗?我一直以为字符类.中的[]是按字面解释的。

当我删除.时,它不再返回该段落标签。

2 个答案:

答案 0 :(得分:3)

您的正则表达式中存在潜在的隐藏问题:

([a-zA-Z0-9.-_+]+@[a-zA-Z0-9.-]+\.[a-z]{2,10}

如果仔细查看第一个字符类,您会发现连字符定义了._之间的范围。这可能是无意中包含了不需要的字符。尝试将连字符移动到字符类的末尾:

([a-zA-Z0-9._+-]+@[a-zA-Z0-9.-]+\.[a-z]{2,10}

这是[a-zA-Z0-9.-_+] beforeafter的正则表达式演示。请注意,@^在原始版本中是匹配的,但是在将-移动到类的末尾之后便不再匹配。

答案 1 :(得分:3)

您正在匹配myArray[myArray.Length] = newArrayItem; (从.-_.的所有字符),其中包括ASCII范围46-95的所有字符。

要解决此问题,请编写_来逃避-

\-