JavaScript引用类型之RegExp正则
Nov 26, 2017
语法
两种写法1234字面量对象形式var expression = /pattern/flags;构造函数形式var expression = new RegExp(pattern, flags);
pattern
正则表达式的文本
flag
如果指定,标志可以具有以下值的任意组合:
- g
全局匹配;找到所有匹配,而不是在第一个匹配后停止 - i
忽略大小写 - m
多行; 将开始和结束字符(^和$)视为在多行上工作(也就是,分别匹配每一行的开始和结束(由 \n 或 \r 分割),而不只是只匹配整个输入字符串的最开始和最末尾处。
使用:12var 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
- 是包含括号子串匹配的正则表达式的静态和只读属性。
- 相关链接https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp/n