正则表达式是一个很强大的工具,在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
]