💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
#第10章 正则表达式的模式匹配 - <a href="#no1">10.1 正则表达式的定义</a> - <a href="#no2">10.2 用于模式匹配的String方法</a> - <a href="#no3">10.3 RegExp对象</a> 正则表达式是一个描述字符模式的对象。JS的`RegExp`类表示正则表达式。 ##<a name="no1">10.1 正则表达式的定义</a> **正则表达式直接量定义为包含在一堆斜杠(`/`)之间的字符。** ###10.1.1 直接量字符 - `\o` NUL字符(\u0000) - `\t` 制表符(\0009) - `\n` 换行符(\u000A) - `\v` 垂直制表符(\u000B) - `\f` 换行符(\u000C) - `\r` 回车符(\u000D) - `\xnn` 由十六进制数nn指定的拉丁字符 - `\uxxxx` 由十六进制数xxxx指定的Unicode字符 - `\cX` 控制字符`^X` > 在正则表达式中,许多标点符号具有特殊含义。`^ $ . * + ? ~ | \ / ( ) [ ] { } ` ###10.1.2 字符类 - `[...]` 方括号内的任意字符 - `[^...]` 不在方括号内的任意字符 - `.` 除换行符和其他Uincode行终止符之外的任意字符 - `\w` 任何ASCII字符组成的单词,等价于`[a-zA-Z0-9]` - `\W` 任何不是ASCII字符组成的单词,等价于`[^a-zA-Z0-9]` - `\s` 任何Unicode字白符 - `\S` 任何非Unicode空白符的字符 - `\d` 任何ASCII数字, 等价于`[0-9]` - `\D` 除了ASCII数字之外的任何字符,等价于`[^0-9]` - `[\b]` 退格直接量 ###10.1.3 重复 - `{n,m}` 匹配前一项至少n次,但不能超过m次 - `{n,}` 匹配前一项n次或更多次 - `{n}` 匹配前一项n次 - `?` 匹配前一项0次或者1次,也就是说前一项是可选的,等价于`{0,1}` - `+` 匹配前一项1次或多次,等价于`{1,}` - `*` 匹配前一项0次或多次,等价于`{0,}` **非贪婪的重复:只需在待匹配的字符后跟随一个问号即可。** ###10.1.4 选择、分组和引用 - `|` 选择,匹配的是该符号左边的子表达式或右边的子表达式 - `(...)` 组合,将几个项组合为一个单元 - `(?:...)` 只组合,把项组合到一个单元,但不记忆与该组相匹配的字符 - `\n` 和第n个分组第一次匹配的字符相匹配,组是圆括号中的子表达式。组索引是从左到右的左括号数。 ###10.1.5 指定匹配位置 - `^` 匹配字符串的开头,在多行检索中,匹配一行的开头 - `$` 匹配字符串的结尾,在多行检索中,匹配一行的结尾 - `\b` 匹配一个单词的边界。 - `\B` 匹配非单词边界的位置 - `(?=p)` 零宽正向先行断言,要求接下来的字符都与p匹配,但不能包括匹配p的那些字符 - `(?!p)` 零宽负向先行断言,要求接下来的字符不与p匹配 ###10.1.6 修饰符 - `i` 执行不区分大小写的匹配 - `g` 执行一个全局匹配 - `m` 多行匹配模式 ##<a name="no2">10.2 用于模式匹配的String方法</a> 1. `search()`:参数是一个正则表达式,返回第一个与之匹配的子串的起始位置,如果找不到匹配的子串,返回`-1`。 2. `replace()`:用来执行检索与替换操作。第一个参数是一个正则表达式,第二个参数是要进行替换的字符串。 3. `match()`:唯一的一个参数就是一个正则表达式,返回的是一个由匹配结果组成的数组。 4. `split()`:唯一的一个参数就是一个正则表达式,可以将调用它的字符串拆分为一个子串组成的数组。 ##<a name="no3">10.3 RegExp对象</a> ###10.3.1 RegExp的属性 每个`RegExp`对象都包含5个属性。 1. `source`:一个只读的字符串,包含正则表达式文本。 2. `global`:一个只读的布尔值,用以说明这个正则表达式是否带有修饰符`g`。 3. `ignoreCase`:一个只读布尔值,用以说明正则表达式是否带有修饰符`i`。 4. `multiline`:一个只读布尔值,用以说明正则表达式是否带有修饰符`m`。 5. `lastInde`:一个可读/写的整数。 ###10.3.2 RegExp的方法 1. `exec()`:对一个执行的字符串执行一个正则表达式。如果有匹配则返回一个数组,无匹配则返回`null`。 2. `test()`:参数是一个字符串,如果包含正则表达式的一个匹配结果,则返回`true`。 var pattern = /java/i; pattern.test('javaScript'); //返回 true