这两个正则有啥区别,为什么第一个会匹配到 @ 和 = ,而将 \\ 后置后则正常?

这两个正则有啥区别,为什么第一个会匹配到 @ 和 = ,而将 \ 后置后则正常?

/^[\u4e00-\u9fa5a-zA-Z0-9,-\\/ :、\.]{0,50}$/.test("@") // 为什么为true?

/^[\u4e00-\u9fa5a-zA-Z0-9,-/ :、\.\\]{0,50}$/.test("@") // 正常
阅读 1k
3 个回答

你这个发出来的应该经过转义了,不是原本的正则吧,用我看到的上面是false,下面报错
image.png

不过可以猜到,主要原因在于-是字符范围,比如0-9表示01234567899个数,a-z表示abcd....z。他们在匹配的时候是根据字符在ASCII码中的大小进行匹配的,比如'@'.charCodeAt()是64,','.charCodeAt()是44,'/'.charCodeAt()是47,64不在44到47内,就匹配不上
image.png

image.png
image.png
image.png
image.png
[]中匹配-字符,需要把-进行转义或把-放到最后

image.png
根据提供的正则, 第一个是false, 第二个会报错

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏