目录
article
javascript 之正则表达式
javascript 之正则表达式
关于正则表达式的文章千千万万,在此我自己整理一下正则表达式相关的内容,作为学习笔记吧。
正则表达式的概念:
正则表达式是由一个字符序列形成的搜索模式。
正则表达式的使用:
- 在搜索数据时,可以用正则表达式来描述需要查询的内容。
- 在替换数据时,可以用正则表达式来描述需要替换的内容。
直接量语法:/pattern/modifiers;
例:
var patt = /javascript/i;
上面的例子中,“javascript"是需要匹配的减缩内容,i 是修饰符的一种,表示忽略大小写。
创建 RegExp 对象的语法:new RegExp(pattern,attributes);
例:
var patt2 = new RegExp("javascript",i);
上面例子中的 javascript 和 i 和直接量语法中的内容的作用相同。
正则表达式有两种使用的方式
- 一种是利用字符串的方法来使用,比如
match(),search(),replace(),split() - 一种是利用
RegExp对象的方法来使用,比如test(),exec()
在下面在继续展开这些方法的作用和调用方式。
这里有一个关键内容,上面讲到的直接量语法和 RegExp 对象创建语法虽然作用是相同的,但是在创建过程中有一个明显的区别,如下:
var exp1 = /w+/g;
var exp2 = new RegExp("/\w+/",g);
上面两个表达式的作用是相同的,但是在使用 RegExp 对象的时候,需要使用到字符串转译符 ()。另外直接量语法创建出来的正则表达式对象效率更高。
正则表达式的修饰符:
i:执行对大小写不敏感的匹配g:执行全局匹配(默认正则表达式在找到第一个匹配对象后就不再寻找,通过 g 可以让正则表达式匹配出所有的内容)m:执行多行匹配
正则表达式模式 (方括号用于查找某个范围内的字符):
| 字符 | 说明 |
|---|---|
| 字母数字字符 | 自身 |
| f | 换页符 |
| n | 换行符 |
| r | 回车 |
| t | 制表符 |
| v | 垂直制表符 |
| / | 一个 / 直接量 |
| \ | 一个 直接量 |
| . | 一个 . 直接量 |
| 一个 直接量 | |
| + | 一个 + 直接量 |
| ? | 一个 ? 直接量 |
| ( | 一个 ( 直接量 |
| ) | 一个 ) 直接量 |
| [ | 一个 [ 直接量 |
| ] | 一个 ] 直接量 |
| { | 一个 { 直接量 |
| } | 一个 } 直接量 |
| XXX | 由十进制数 XXX 指 定的 ASCII 码字符 |
| Xnn | 由十六进制数 nn 指定的拉丁字符,例如,x0A 等价于 n |
| cX | 控制字符^X. 例如, cI 等价于 t, cJ 等价于 n |
| uxxxx | 由十六进制数 xxxx 指定的 Unicode 字符,例如 u0009 等价于 t |
| […] | 位于括号之内的任意字符 |
| [^…] | 不在括号之中的任意字符 |
| . | 除了换行符之外的任意字符,等价于[^n] |
| w | 任何单字字符, 等价于[a-zA-Z0-9_] (注意这里包含下滑线,原文有错误) |
| W | 任何非单字字符,等价于[^a-zA-Z0-9_] (注意这里包含下滑线,原文有错误) |
| s | 任何空白符,等价于[tnrfv] |
| S | 任何非空白符,等价于[^tnrfv] |
| d | 任何数字,等价于[0-9] |
| D | 除了数字之外的任何字符,等价于[^0-9] |
| [b] | 一个退格直接量 (特例) |
| {n, m} | 匹配前一项至少 n 次,但是不能超过 m 次 |
| {n, } | 匹配前一项 n 次,或者多次 |
| {n} | 匹配前一项恰好 n 次 |
| ? | 匹配前一项 0 次或 1 次,也就是说前一项是可选的. 等价于 {0, 1} |
| + | 匹配前一项 1 次或多次,等价于{1,} |
| * | 匹配前一项 0 次或多次.等价于{0,} |
| ^ | 匹配的是字符的开头,在多行检索中,匹配的是一行的开头 |
| $ | 匹配的是字符的结尾,在多行检索中,匹配的是一行的结尾 |
| b | 匹配的是一个词语的边界.简而言之就是位于字符 w 和 w 之间的位置 (注意:[b]匹配的是退格符) |
| B | 匹配的是非词语的边界的字符 |