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


    今天遇到一个问题

    '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')里有没有*这种形式的字符?

  • 相关阅读:
    利息基础理论
    本地数据库
    线上一个数组查询遇到的坑
    老兵的十年职场之路(二)
    老司机心得之时间管理"入坑"
    补习系列(19)-springboot JPA + PostGreSQL
    PostGreSQL(1)-源码安装
    补习系列(18)-springboot H2 迷你数据库
    SpringBoot 2 要不要升级
    补习系列(17)-springboot mongodb 内嵌数据库
  • 原文地址:https://www.cnblogs.com/youryida/p/4721511.html
Copyright © 2020-2023  润新知