正则表达式是一个很强大的工具,在Python中被广泛使用,一般我在Python中也用的多一点,最近在JavaScript编程中也经常遇见,这里做一下简单的记录。
JavaScript正则表达式简介
与Python中的正则表达式类似,JavaScript的正则表达式中,关键有两部分
- 匹配模式串
- 元字符
- 匹配标志
- 匹配方法(正则方法)
元字符
匹配模式串的核心部分。
| 元字符 | 描述 |
|---|---|
| . | 查找单个字符,除了换行和行结束符 |
| \w | 查找单词字符 |
| \W | 查找非单词字符 |
| \d | 查找数字 |
| \D | 查找非数字字符 |
| \s | 查找空白字符 |
| \S | 查找非空白字符 |
| \b | 匹配单词边界 |
| \B | 匹配非单词边界 |
| \0 | 查找 NUL字符 |
| \n | 查找换行符 |
| \f | 查找换页符 |
| \r | 查找回车符 |
| \t | 查找制表符 |
| \v | 查找垂直制表符 |
| \xxx | 查找以八进制数 xxxx 规定的字符 |
| \xdd | 查找以十六进制数 dd 规定的字符 |
| \uxxxx | 查找以十六进制 xxxx规定的 Unicode 字符 |
特殊字符
| 字符 | 描述 |
|---|---|
量词
指定了重复匹配字符的确数或者约数。下面展示一些量词搭配元字符的使用:
| 量词 | 描述 |
|---|---|
| n+ | 匹配任何包含至少一个 n 的字符串 |
| n* | 匹配任何包含零个或多个 n 的字符串 |
| n? | 匹配任何包含零个或一个 n 的字符串 |
| n{x} | 匹配包含 x 个 n 的序列的字符串 |
| n{x,y} | 匹配包含最少 x 个、最多 y 个 n 的序列的字符串 |
| n{x,} | 匹配包含至少 x 个 n 的序列的字符串 |
n可以是前面的元字符。
匹配标志
在默认情况下,正则的匹配最多只会匹配到一个结果。但是可以在正则匹配模式串后面添加标记:
- /g 表示该表达式将用来在输入字符串中查找所有可能的匹配,返回的结果可以是多个。
- /i 表示匹配的时候不区分大小写。
- /m 表示多行匹配——匹配换行符两端的潜在匹配。影响正则中的^$符号。
正则方法
| 方法 | 描述 |
|---|---|
exec |
一个在字符串中执行查找匹配的RegExp方法,它返回一个数组(未匹配到则返回 null)。 |
test |
一个在字符串中测试是否匹配的RegExp方法,它返回 true 或 false。 |
match |
一个在字符串中执行查找匹配的String方法,它返回一个数组,在未匹配到时会返回 null。 |
matchAll |
一个在字符串中执行查找所有匹配的String方法,它返回一个迭代器(iterator)。 |
search |
一个在字符串中测试匹配的String方法,它返回匹配到的位置索引,或者在失败时返回-1。 |
replace |
一个在字符串中执行查找匹配的String方法,并且使用替换字符串替换掉匹配到的子字符串。 |
split |
一个使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的 String 方法。 |
- test方法仅仅返回一个布尔值,表示是否匹配成功;
- exec方法会返回关于匹配结果的详情,一般包括:
- 匹配的全部字符串
- 匹配模式串中括号的分组捕获
- index:匹配到的字符位于原始字符串中的索引值(基于0)
- input:原始字符串
- match方法也会返回一个比较详细的匹配结果。
插入语
插入语即在模式串中使用括号,将希望被记忆的片段保存下来,以便后续程序中使用。
比如这个模式串const reStr = /.*-q\s*(.*)-p\s*(.*)/,用于匹配的栗子如下:
输入命令吧?company_query -q 3 -p Static Department, 3000
输入为 company_query -q 3 -p Static Department, 3000
[
'company_query -q 3 -p Static Department, 3000',
'3 ',
'Static Department, 3000',
index: 0,
input: 'company_query -q 3 -p Static Department, 3000',
groups: undefined
]