JS正则表达式

来源:互联网 发布:智明创发软件待遇 编辑:程序博客网 时间:2024/06/14 08:47

对于正则表达式一直很懵,写个总结理清一下思路。-_-

  • 正则表达式语法
    • 字面量
    • 构造函数
 var reg = /\d/g; var reg = new RegExp('\\d','g');

tips: 构造函数方法中,\d中的反斜杠要转义

eg:

  var reg = /\d/g;  var reg = new RegExp('\\d','g'); '3e'.replace(reg,'t'); => 'te'
  • 修饰符

    • g : 全局匹配
    • i : 只匹配小写
    • m : 多行搜索

    tips: 这里注意下m的使用例子

    var mulSrt="@123\n@456\n@890";mulSrt.replace(/^@\d/gm,'Q');=>"Q23Q56Q890"
  • 元字符

    • 原义文本字符
    • 元字符 (正则表达式中有特殊含义的非字母字符)
      eg:* + ? $ ^ . | \ ( ) { } [ ]

Tips: 正则表达式中的一个字符,对应字符串一个字符
eg: ab\t
对应 a b tab

  • 字符类,用 [ ] 构建一个类

    • 泛指符合某些特性的对象,不是特指字符
    • 如[abc],指把a b c 归为一类
    • [^abc] 表示不是a或b或c的内容。在范围内的^表示取反
    'a1b1c1d1'.replace(/[abc]/g,'x')=> 'x1x1x1x1''a1b1c1d1'.replace(/[^abc]/g,'x')=>"axbxcxxx"
  • 范围类

    • [a-z]
    • 表示a到z , 闭区间,包含 a、z本身
    • 范围内部可以连写
      eg: [a-zA-Z] 匹配小写a-z 和 大写A-Z
    • 如果要匹配横线,eg: [a-z-]
  • 预定义字符

    • . 除回车符和换行符之外的所有字符
    • \d 数字字符
    • \D 非数字字符
    • \w 单词字符(字母、数字、下划线)
    • \W 非单词字符
    • \s 空白符
    • \S 非空白符

    eg: ab+数字+任意字符
    ab\d.

  • 边界

    • ^ 开始
    • $ 结束
    • \b 单词有边界
    • \B 单词无边界
  • 量词

    • ? 最多出现一次
    • +至少出现一次
    • *任意次
    • {n} 出现n次
    • {n,m} n 到 m次
    • {n,} 至少出现n次
  • 贪婪模式

    Tips: 尽可能多地匹配,比如 {3,5}会匹配5次

    '12345678'.replace(/\d{3,6}/,'X');=>"X78"
  • 非贪婪模式

    • 尽可能少的匹配,在量词后加上?
    '12345678'.replace(/\d{3,6}?/,'X');=> "X45678"
  • 分组 ( )

    • 用()进行分组,达到量词匹配
    /abc{3}/ 表示匹配c 3次/(abc){3}/ 表示匹配abc 3
    • 或 |
    'ByronsperByrCasper'.replace(/Byr(on|Ca)sper/g,'X')=> "XX"
    • 反向引用
    '2016-11-25'.replace(/(\d{4})-(\d{2})-(\d{2})/g,'$2-$3-$1');=> "11-25-2016"
  • 前瞻

    • 正向 exp(?=assert)
    • 正向 exp(?=assert)
      eg: \w(?=\d) 匹配单词后面是数字
    'a2*34v8'.replace(/\w(?=\d)/g,'x')"x2*x4x8"

    最后几道测试题

    1. 匹配其中的 is 单词
      This is a test.

    2. 去掉http协议的jpg文件的协议头
      http://img.host/78.jpg

    3. 年/月/日 格式改成 日-月-年
      2006/02/03

原创粉丝点击