正则表达式速查表

验证某个模式是否获得预期的匹配结果并不难,但如何验证它不会匹配到你不想要的东西就没那么简单了。

匹配单个字符

  1. 直接输入字符
  2. .匹配任何单个字符
  3. 使用\进行转义

匹配一组字符

  1. 使用元字符[]来定义一个字符集合
  2. 合法的字符区间
    • 0-9匹配所有数字
    • A-Z
    • a-z
    • A-z会包含在Za之间的字符
  3. 使用元字符^对一个字符集合进行取非匹配

使用元字符

  1. 匹配空白字符
    • [\b]回退(Backspace)
    • \f换页符
    • \n换行符
    • \r回车符
    • \t制表符tab
    • \v垂直制表符

Windows使用\r\n结束文本行,Unix和Linux使用\n

  1. 匹配数字
    • \d任何一个数字字符,等价于[0-9]
    • \D任何一个非数字字符,等价于[^0-9]
  2. 匹配字母和数字
    • \w任何一个字母数字字符(不区分大小写)或下划线字符,等价于[a-zA-Z0-9_]
    • \W任何一个非字母数字与非下划线字符,等价于[^a-zA-Z0-9_]
  3. 匹配空白字符
    • \s任何一个空白字符,等价于[\f\n\r\t\v]
    • \S任何一个非空白字符,等价于[^\f\n\r\t\v]

重复匹配

  1. +匹配一个或多个字符
  2. *匹配零个或多个字符
  3. ?匹配零个或一个字符
  4. {}用来设定重复次数
    • 一个数字设定一个精确的值,例如{3}
    • 两个数字设定一个区间,例如{2,4}
    • 省略最大值,至少重复多少次,例如{3,}
  5. +*都是贪婪型元字符,尽量多匹配,可以使用懒惰型版本,尽量少匹配。在贪婪型元字符后加上一个?
    • ++?
    • **?
    • {3,}{3,}?

位置匹配

  1. \b单词边界,用来匹配一个单词的开头或结尾。(只有字母数字和下划线,也就是\w相匹配的字符可以构成单词,-不能)
  2. \B不匹配一个单词边界。\B-\B,要注意中间放的本身不是单词字符的情况。
  3. 字符串边界,^字符串开头,$字符串结尾。
  4. 分行匹配模式,使用(?m)记号启用分行匹配模式,该模式将换行视为字符串分隔,必须出现在整个模式的最前面。例如(?m)^\s*//.$,匹配JavaScript//注释。

可选标识符

  1. g包含所有匹配
  2. i不区分大小写

子表达式

  1. 子表达式用()括起来,将被视为一个独立元素。
  2. 子表达式允许多层嵌套。

逻辑操作符

  1. |是或操作符,例如10|20将匹配19或20。

回溯引用:前后一致匹配

  1. \1代表着模式里的第一个子表达式。\2\3依次类推。
  2. 在JavaScript中使用$1等来进行替换。

前后查找

  1. JavaScript只支持向前查找。
  2. (?=:)不会匹配到:,它表示:之前的内容。
  3. (?!:)表示向前查找取非。

正则表达式在JavaScript中的实现

  1. JavaScript中跟正则表达式相关的方法:
    • exec:
    • match:
    • replace:
    • search:
    • split:
    • test:
  2. g选项激活全局搜索功能,i不区分字母大小写。
  3. m支持多行字符串,s支持单行字符串,x忽略正则表达式模式里的空白字符。
  4. 在使用回溯引用的时候,$'返回匹配字符串前面的所有东西,$`返回被匹配字符串后面的所有东西,$+将返回最后一个匹配的子表达式,$&将返回被匹配到的所有东西。
  5. JavaScript提供了一个名为RegExp的全局对象,在执行完一个正则表达式后,可以通过这个对象获得这次执行有关的信息。