imooc 正则

Regular Expression 使用单个字符串来描述、匹配一系列符合某个句法规则的字符串

图形化在线工具

  • http://refiddle.com/
  • https://regexper.com/ 或者 https://jex.im/regulex

有两种方法实例化 RegExp 对象

  • 字面量
  • 构造函数

修饰符

  • g: global 全文搜索,匹配所有的
  • i: ignore case 忽略大小写,默认大小写敏感
  • m: multiple lines 多行搜索

字符类型

  • 原意文本字符
  • 元字符,有特殊含义的非字母字符,比如 * + ? $ ^ . | ( ) { } [ ]
    • 字符类,使用[abc]构建一个类;字符类取反,使用[^abc]
    • 范围类,使用[a-z]所有小写字母,[a-zA-Z]所有英文字母
    • 预定义类,. \d \D \s \S \w \W
    • 边界,\b \B ^ $
    • 量词,? + * {n} {n,m} {n,}
      • 贪婪模式,量词后加上?
      • 分组,使用(abc){3},abc 重复了 3 次
      • 或,使用|,优先级很低
    • 反向引用,捕获分组内的内容,使用 $1 $2 ...;忽略分组,使用 (?:xxx)
    • 前瞻后顾
      • 前瞻,(?=assert) (?!assert)\w(?=\d) 匹配一个字符,该字母后面必须是数字
      • 后顾,(?<=assert) (?<!assert)

RegExp 对象属性,只读

  • gloable: 默认 false

  • ignoreCase: 默认 false

  • mutiline: 默认 false

  • lastIndex: 当前表达式匹配内容的最后一个字符的下一个位置,只有全局的正则才有效

  • source: 正则表达式的文本字符串

RegExp 对象方法

  • RegExp.prototype.test(str)
  • RegExp.prototype.exec(str) 没有匹配返回 null,否则返回一个结果数组 [索引,组内信息]

String 对象方法

  • String.prototype.search(reg) 返回第一个结果,忽略全局 g 标志
  • String.prototype.match(reg)
    • 非全局没有 g,只执行一次匹配,没有匹配返回 null,否则返回一个结果数组,和上面的 exec 一样 [索引,组内信息]
    • 全局有 g,没有匹配返回 null,否则返回匹配的数组
  • String.prototype.split(reg)
  • String.prototype.replace(reg)
    • 高级用法,第二参数是回调函数,四个参数:匹配的字符串、分组内容(可能没有)、字符串索引、原字符串

补充:

  • 有关 lastIndex 的坑

    var r = /\w/g
    r.test('ab') // true
    r.lastIndex // 1
    r.test('ab') // true
    r.lastIndex // 2
    r.test('ab') // false
    r.lastIndex // 0
    
  • 课程地址

随记

  • 字符匹配

    • 模糊匹配
      • 横向{}
        • 大括号闭区间
        • 一些简写 ? + *
        • 贪婪匹配?(区分简写?表示有或无)
      • 纵向[]
        • 连字符范围-
        • 排除字符^(区分位置锚字符)
        • 一些简写 \d \w \s .
        • 优先级很低
  • 位置匹配

    • 开头结尾^ $
    • 单词边界 \b``\B
    • 正负向先行断言(?=p) (?!p)
    • es6 向后行断言(?<=p) (?<!p)
    • 一个位置内有很多位置
  • 括号

    • 分组
    • 提取
    • 替换
    • 反向引用\1
      • 嵌套括号以左括号为准
    • 非捕获(?:p)
  • 回溯

  • 不懂的点

    • 惰性和贪婪
    • /^|$/g 中间的管道符啥作用
  • 引用

总结

一些概念

元字符 元字符
基本 . \ |
字符组 [] [^] [-]
数量 {m,n} {m,} {m} + * ?
位置 ^ $ \b \B (?=p) (?!p)
特殊 \d \D \s \S \w \W
标志 g i m

简写

简写 表示 记忆
\d (\D) [0-9] digit
\w (\W) [0-9a-zA-Z_] word
\s \S [\t\v\n\r\f] space
. [^\n\r\u2028\u2029] all
? {0,1}
+ {1, }
* {0,}

贪婪 和 惰性 (所有量词后面添加 ? 都能实现惰性,并且管道符也是惰性的)

举例:

贪婪:能力范围内,越多越好 \d{2,5}

惰性:满足最低配就进入下次 \d{2,5}?

位置的特性

  • /^hello$/ 写成 /^^hello$$$/ 等效

优秀的文章

learn-regex

上次更新: 6/5/2020, 3:22:23 AM