正则表达式中,转义字符、元字符在 [] 中的含义

今天遇到一个问题

'5.4.0a'.match(/[d.]+/)

按照我之前的理解,[]表示里面的任意一个字符的意思,d表示数字,.表示任意单个字符,这样的话,匹配结果应该是'5.4.0a'

but,实践结果是 '5.4.0'

显然这里的.表示的只是. 并没有别的意思,'5.4.0a'.match(/[d.]+/) 测试这句结果也是一样的。

这么看,问题的关键应该是[],

先去看看mdn的解释:

这说明,并不能看出什么特别的含义,于是只好自己多测试了一些demo,and和其他前端小伙伴交流了一下:

'5*4*0a'.match(/[d*]+/)  //'5*4*0'
'5^4^0a'.match(/[d^]+/) //'5^4^0'
" "=="n"  //false
"a"==="a" //true

可以总结一下了:

1.对于没有转义含义的字符,在js认为看来 'x'==='x'
2.对于正则[]中的字符:
  (1)单个字符(包括元字符.*?^$+等等)表示的就是单个字符,没有其他意义。例外:[^]——开头的^表示非;[a-z]——中间的-表示范围。
  (2)加有转义意义的字符(如w d 等)表示的是转义后的字符。

so,反过头看一下最初的问题,'5.4.0a'.match(/[d.]+/)——匹配的是一到多个数字或.,结果自然是'5.4.0'

意外收获:
  1.匹配任意字符可以用这个[^](未做充分测试,有兴趣的同学们建议试试)
  2.发现了一道我目前找不到答案的题:正则判断一下,一个字符串(如'5*4*0a')里有没有*这种形式的字符?

原文地址:https://www.cnblogs.com/youryida/p/4721511.html