[._-]和[.-_]有什么区别呢?

[._-]和[.-_]有什么区别呢?

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>节点练习</title>
  <script>
  var str='asdf.123-546_sdf@qq.com-c_cn.cn';
  var pattern = /^[a-z0-9]+(?:[._-][a-z0-9]+)*@[a-z0-9]+(?:[._-][a-z0-9]+)*\.[a-z]{2,4}$/i;

  //pattern这正则可以正常输出。

  //var pattern1 = /^[a-z0-9]+(?:[.-_][a-z0-9]+)*@[a-z0-9]+(?:[.-_][a-z0-9]+)*\.[a-z]{2,4}$/i;

 //当我把[._-]改成[.-_]时输出是 null 这是为什么?还有中括号你面的.  不是特殊字符吗, 为什么不用加\转义?

  document.write(pattern.exec(str));
  </script>
</head>
<body>
</body>
</html>

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

'.' 在 字符组的方括号[]内部,已经不是元字符了,只是一个普通的'.'  。JavaScript正则中很多原本需要转义的元字符在字符组中都不需要转义,即可代表自身,除了点'.'外,还有 ? * + 等等,希望对你有帮助,祝学习愉快。


卡布琦诺 2018-04-27 11:45:03

这是因为你将[._-]改成[.-_]时,str='asdf.123-546_sdf@qq.com-c_cn.cn';对不上pattern1中的特殊符号对不上位置了,建议参考下图进行理解

http://img1.sycdn.imooc.com//climg/5ae29ca8000138f415940699.jpg

希望可以帮到你~

  • 提问者 空之境界丶 #1
    []的意思不是取第一个匹配到的字符吗?应该跟里面字符的位置没有关系才对。而且就算我把str='asdf.123_546-sdf@qq.com_c-cn.cn';改成str='asdf.123-546_sdf@qq.com-c_cn.cn';pattern中的特殊字符写成[.-_],输出就是null。 还有中括号你面的. 这个特殊字符为什么不用加反斜杠转义?
    2018-05-04 21:28:30
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
进击JavaScript核心 2018
  • 参与学习       466    人
  • 提交作业       74    份
  • 解答问题       635    个

JavaScript不仅能实现静态页面到动态特效的转变,还能完成数据的动态交互,但是关于js到底功能有多强大,大家还是有所期待的,本路径将带你深入到js中,一一揭开JavaScript的神秘面纱。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师