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"]
有人可以帮助我理解为什么< >
字符与该正则表达式匹配吗?我一直以为字符类.
中的[]
是按字面解释的。
当我删除.
时,它不再返回该段落标签。
答案 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.-_+]
before和after的正则表达式演示。请注意,@
和^
在原始版本中是匹配的,但是在将-
移动到类的末尾之后便不再匹配。
答案 1 :(得分:3)
您正在匹配myArray[myArray.Length] = newArrayItem;
(从.-_
到.
的所有字符),其中包括ASCII范围46-95的所有字符。
要解决此问题,请编写_
来逃避-
\-