正则表达式

MDNopen in new window菜鸟教程open in new window

正则表达式是国际标准,跨语言。

正则表达式是一个规则,用于验证字符串。

基础

  1. 字面量匹配

规则中直接书写字面量字符

  1. 特殊字符
  • . 匹配除换行符之外的任何单个字符。
  • ^ 匹配输入的开始。
  • $ 匹配输入的结束。
  • () 标记一个子表达式的开始和结束位置
  1. 转义符
  • \n 匹配一个换行符
  • \r 不要使用,出现在 Windows 操作系统中。
  • \t 匹配一个制表符
  • \s 匹配一个空白字符,包括空格、制表符、换页符和换行符。
  • \S 匹配一个非空白字符。
  • \b 匹配一个单词的边界。
  • \B 匹配一个非单词边界。
  • \d 匹配一个数字。等价于[0-9]
  • \D 匹配一个非数字字符。等价于[^0-9]
  • \w 匹配一个单字字符(字母、数字或者下划线)。等价于 [A-Za-z0-9_]
  • \W 匹配一个非单字字符。等价于 [^A-Za-z0-9_]
  • \uhhhh 匹配一个十六进制数表示的 Unicode 字符。h表示一个十六进制的 Unicode 字符

转义符\可以将特殊字符转义

  1. 字符集

[字符范围][^字符范围] 对字符范围取反

匹配中文:[\u4e00-\u9fa5]

  1. 量词

匹配前面一个表达式出现的次数

  • * 匹配前一个表达式 0 次或多次。等价于 {0,}。
  • + 匹配前一个表达式 1 次或多次。等价于 {1,}。
  • ? 匹配前面一个表达式 0 次或者 1 次。等价于 {0,1}。
  • {n} 匹配 n 个
  • {n,} 匹配 >=n 个
  • {n,m} 匹配 n~m 个
  1. 或者

多个规则之间适用,或者|,表示多个规则任选其一。

JS 中的应用

JS 中,正则表达式表现为一个对象,是通过构造函数 RegExp 创建的

创建正则对象

  1. 字面量

    由斜杠包围而不是引号包围。/正则表达式/

  2. 构造函数模式

//以下三种表达式都会创建相同的正则表达式:
;/ab+c/i
new RegExp('ab+c', 'i')
new RegExp(/ab+c/, 'i')
1
2
3
4

静态属性

  • RegExp.lastIndex

    该索引表示从哪里开始下一个匹配

实例属性

  • global

    判断是否开启全局匹配,根据情况返回 true 或 false。

  • ignoreCase

    是否忽略字符大小写。

  • multiline

    是否开启多行模式匹配。

  • source

    得到正则表达式的文本,不包括正则字面量两侧的斜杠与标志字符。

实例方法

  • test()

    用来查看正则表达式与指定的字符串是否匹配,返回 true 或 false。

  • exec()

    execute 的缩写,执行匹配,得到匹配的结果,返回一个结果数组或 null。

正则表达式,默认情况,使用贪婪模式(尽可能多匹配)

在量词后面,加上?,表示进入非贪婪模式。

字符串对象中的正则

  • match()

    使用正则表达式与字符串相比较。

    返回值:

    • 如果使用 g 标志,则将返回与完整正则表达式匹配的所有结果,但不会返回捕获组。
    • 如果未使用 g 标志,则仅返回第一个完整匹配及其相关的捕获组(Array)。返回的数组有附加属性
      • groups: 一个捕获组数组 或 undefined(如果没有定义命名捕获组)。
      • index: 匹配的结果的开始位置
      • input: 搜索的字符串.
  • search()

    对正则表达式和指定字符串进行匹配搜索,返回第一个出现的匹配项的下标。

  • split()

    使用指定的分隔符字符串将一个 String 对象分割成子字符串数组,以一个指定的分割字串来决定每个拆分的位置。

    语法:

    str.split([separator[, limit]])

    参数:

    separator

    指定表示每个拆分应发生的点的字符串。separator 可以是一个字符串或正则表达式。

    limit

    一个整数,限定返回的分割片段数量。

  • replace() MDNopen in new window

    返回替换后的新字符串,原字符串不会改变。

    语法:

    str.replace(regexp | substr, newSubStr | function)

    参数:

    regexp (pattern)

    一个 RegExp 对象或者其字面量。该正则所匹配的内容会被第二个参数的返回值替换掉。

    substr (pattern)

    一个将被 newSubStr 替换的 字符串。其被视为一整个字符串,而不是一个正则表达式。仅第一个匹配项会被替换。

    newSubStr (replacement)

    用于替换掉第一个参数在原字符串中的匹配部分的字符串。该字符串中可以内插一些特殊的变量名。

    function (replacement)

    一个用来创建新子字符串的函数,该函数的返回值将替换掉第一个参数匹配到的结果。

进阶

捕获组

用小括号包裹的部分叫做捕获组,捕获组会出现在匹配结果中。

(正则表达式)

捕获组可以命名,叫做具名捕获组。在小括号前添加 ?<捕获组名字>

(?<捕获组名字>正则表达式)

非捕获组 在小括号前添加 ?:

(?:正则表达式)

反向引用

在正则表达式中,使用某个捕获组,\捕获组编号

正向断言(预查)

检查某个字符后面的字符是否满足某个规则,该规则不成为匹配结果,并且不成为捕获组。 (?=正则表达式)

正向断言(预查)

检查某个字符后面的字符是否不满足某个规则,该规则不成为匹配结果,并且不成为捕获组。(?!正则表达式)