语法

两种写法

1
2
3
4
字面量对象形式
var expression = /pattern/flags;
构造函数形式
var expression = new RegExp(pattern, flags);

pattern
正则表达式的文本
flag
如果指定,标志可以具有以下值的任意组合:

  • g
    全局匹配;找到所有匹配,而不是在第一个匹配后停止
  • i
    忽略大小写
  • m
    多行; 将开始和结束字符(^和$)视为在多行上工作(也就是,分别匹配每一行的开始和结束(由 \n 或 \r 分割),而不只是只匹配整个输入字符串的最开始和最末尾处。

使用:

1
2
var expression = /ab+c/i;
var expression = new RegExp("ab+c", 'i');

返回信息:
[匹配到的字符串和所有被记住的子字符串、index(在输入的字符串中匹配到的以0开始的索引值。)、input(初始字符串。)]

例:

1
["https://map.baidu.com/", "map.baidu.com", index: 0, input: "https://map.baidu.com/x/y/z"]

两种写法区别:

  • 正则文本的写法
    使用字面量的方式不需写引号。
    对于.等需要转义字符,使用构造函数方式需要两次转义(new RegExp(“\\a+c”, “i”))。
  • 编译
    使用字面量正则对象提供表达式编译状态,表达式不会再每一次迭代中都被重新编译。而使用构造函数方式的正则对象,提供运行时编译即每次迭代会重新编译,导致每次正则对象的执行结果都是相同的。

正则表达式中特殊字符的含义

字符类别

  • 字符”.”——匹配任意字符。
  • 字符”\d”——匹配任意阿拉伯数字。等价于[0-9]。
  • 字符”\D”——匹配任意一个不是阿拉伯数字的字符。等价于[^0-9]。
  • 字符”\w”——匹配任意来自基本拉丁字母表中的字母数字字符,还包括下划线。等价于 [A-Za-z0-9_]。
  • 字符”\W”——匹配任意不是基本拉丁字母表中单词(字母数字下划线)字符的字符。等价于 [^A-Za-z0-9_]。
  • 字符”\s”——匹配一个空白符,包括空格、制表符、换页符、换行符和其他 Unicode 空格。

字符集合

  • 字符”[xyz]”——一个字符集合,也叫字符组。匹配集合中的任意一个字符。你可以使用连字符’-‘指定一个范围。
  • 字符”[^xyz]”——一个反义或补充字符集,也叫反义字符组。也就是说,它匹配任意不在括号内的字符。你也可以通过使用连字符 ‘-‘ 指定一个范围内的字符。

边界

  • 字符”^”——匹配输入开始。如果多行(multiline)标志被设为 true,该字符也会匹配一个断行(line break)符后的开始处。
  • 字符”$”——匹配输入结尾。如果多行(multiline)标志被设为 true,该字符也会匹配一个断行(line break)符的前的结尾处。

分组

  • 字符”(x)”——匹配 x 并且捕获匹配项。被匹配的子字符串可以在结果数组的元素 [1], …, [n] 中找到,或在被定义的 RegExp 对象的属性 $1, …, $9 中找到。
  • 字符”(?:x)”——捕获括号。匹配项不能够从结果数组的元素 [1], …, [n] 或已被定义的 RegExp 对象的属性 $1, …, $9 再次访问到。

数量词

  • 字符”x*”——匹配前面的模式 x 0 或多次。
  • 字符”x+”——匹配前面的模式 x 1 或多次。等价于 {1,}。
  • 字符”x?”——匹配前面的模式 x 0 或 1 次。如果在数量词 *、+、? 或 {}, 任意一个后面紧跟该符号(?),会使数量词变为非贪婪( non-greedy) ,即匹配次数最小化。反之,默认情况下,是贪婪的(greedy),即匹配次数最大化。

  • 字符”x|y”——匹配 x 或 y。

  • 字符”x{n}”——n 是一个正整数。前面的模式 x 连续出现 n 次时匹配。
  • 字符”x{n,}”——n 是一个正整数。前面的模式 x 连续出现至少 n 次时匹配。
  • 字符”x{n,m}”——n 和 m 为正整数。前面的模式 x 连续出现至少 n 次,至多 m 次时匹配。

实例属性

由于应用中使用较少,这里不赘述。

实例方法

  • RegExp.prototype.exec()
    在目标字符串中执行一次正则匹配操作。返回匹配结果。
  • RegExp.prototype.test()
    测试当前正则是否能匹配目标字符串。返回true or false。

类属性

RegExp.$1, …, RegExp.$9