字符组和量词
2022年8月16日大约 3 分钟约 817 字
字符组和量词
1. 模糊匹配
匹配长度不固定
const reg1 = /ab{2,5}c/g
const str = 'abc abbc abbbc abbbbc abbbbbc abbbbbbc'
console.log(str.match(reg1));
// [ 'abbc', 'abbbc', 'abbbbc', 'abbbbbc' ]
匹配固定长度,可以是不固定字符
const reg2 = /a[123]b/g;
const str2 = "a0b a1b a2b a3b a4b";
console.log( str2.match(reg2) );
// [ 'a1b', 'a2b', 'a3b' ]
2. 字符类
[]
包裹的内容叫字符类,但是只匹配其中一个
[abc]
,表示匹配一个字符,可以是'a','b','c'之一
2.1. 范围表示法
比如[123456abcdXYZ],可以使用-
简写成[1-6a-dX-Z]
如果要匹配'-'字符,可以使用''转义
2.2. 排除字符
如下示例[^123],表示排除1,2,3之外的任意一个字符
const reg2 = /a[^123]b/g;
const str2 = "a0b a1b a2b a3b a4b";
console.log( str2.match(reg2) );
// [ 'a0b', 'a4b' ]
2.3. 常见简写
字符组 | 具体含义 |
---|---|
\d | 表示 [0-9]。表示是一位数字。记忆方式:其英文是 digit(数字)。 |
\D | 表示 [^0-9]。表示除数字外的任意字符。 |
\w | 表示 [0-9a-zA-Z_]。表示数字、大小写字母和下划线。记忆方式:w 是 word 的简写,也称单词字符。 |
\W | 表示 [^0-9a-zA-Z_]。非单词字符。 |
\s | 表示 [ \t\v\n\r\f]。表示空白符,包括空格、水平制表符、垂直制表符、换行符、回车符、换页符。记忆方式:s 是 space 的首字母,空白符的单词是 white space。 |
\S | 表示 [^ \t\v\n\r\f]。 非空白符。 |
. | 表示 [^\n\r\u2028\u2029]。通配符,表示几乎任意字符。换行符、回车符、行分隔符和段分隔符除外。记忆方式:想想省略号 … 中的每个点,都可以理解成占位符,表示任何类似的东西。 |
如果要匹配任意字符怎么办?可以使用 [\d\D]、[\w\W]、[\s\S] 和 [^] 中任何的一个。
3. 量词
3.1 简写
字符组 | 具体含义 |
---|---|
{m,} | 表示至少出现 m 次。 |
{m} | 等价于 {m,m},表示出现 m 次。 |
? | 等价于 {0,1},表示出现或者不出现。记忆方式:问号的意思表示,有吗? |
+ | 等价于 {1,},表示出现至少一次。记忆方式:加号是追加的意思,得先有一个,然后才考虑追加。 |
* | 等价于 {0,},表示出现任意次,有可能不出现。记忆方式:看看天上的星星,可能一颗没有,可能零散有几颗,可能数也数不过来。 |
惰性量词 | 贪婪量词 |
---|---|
{m,n}? | {m,n} |
{m,n}? | {m,n} |
?? | ? |
+? | + |
*? | * |
贪婪匹配:
const reg3 = /\d{2,5}/g;
const str3 = "123 1234 12345 123456";
console.log( str3.match(reg3) );
// [ '123', '1234', '12345', '12345' ]
惰性匹配:
const reg3 = /\d{2,5}?/g;
const str3 = "123 1234 12345 123456";
console.log( str3.match(reg3) );
// [ '12', '12', '34', '12', '34', '12', '34', '56' ]
4. 分支
一个模式可以实现横向和纵向模糊匹配。而多选分支可以支持多个子模式任选其一。
使用管道符|
表示。如:(p1|p2|p3),其中 p1、p2 和 p3 是子模式,例如要匹配字符串 "good" 和 "nice" 可以使用 /good|nice/。
分支结构也是惰性的,即当前面的匹配上了,后面的就不再尝试了
5. 案列
5.1. 匹配16进制颜色值
5.2. 匹配时间
5.3. 匹配日期
5.4. 匹配windows路径
5.5. 匹配id
<div id="container" class="main"></div>