chapter1
1.两种模糊匹配(通过string.match(regExp))
- 横向
- 可匹配不定长的字符串
- Eg: /ab{2,4}c/ 可匹配"abbc abbbc abbbbc"
- 纵向
- 可匹配多个字符串
- Eg: /a[123]b/ 可匹配"a1b a2b a3b"
2.1字符组
- [123456abcdEFGH] => [1-6a-dE-H]
- '-'表示连字符
- 若需要匹配’-’ 则需要转义 eg: [1\-4] or [-14] or [14-] 都表示匹配’1’, ‘-’, '4’三个字符
2.2排除字符组
2.3常用简写
- /d => [0-9]一位数字 /D => [^0-9] 非数字字符
- /w => [0-9a-zA-Z_]单词字符(包括数字,字母,下划线) /W => [^0-9a-zA-Z_] 非单词字符
- /s => [\t\v\n\r\f]各种空白符制表符等等 /S => [^\t\v\n\r\f] 非空白符
- . => 通配符
- 字母大写都表示为小写的反
- 匹配任意字符[\d\D] or [\w\W] or [\s\S] or [^]
3.1量词
- {m, } 表示至少出现m次 {m}表示出现m次
- ?=> {0, 1)表示出现或不出现
- + => {1, } 表示1次以上
- * => {0, } 表示任意次
3.2贪婪匹配
- /\d{2,3}/ 默认是贪婪匹配 连续的2-3个数字 当匹配"12 123 1234"时 结果为 12 123 123
- 会尽可能多的匹配
3.3惰性匹配
- /\d{2,3}?/ 在量词后加?即表示惰性匹配 当匹配"12 123 1234"时 结果为 12 12 12 34
- 匹配到最少要求时就返回
4.多选分支
- /good|well/ 表示匹配good或well
- /good|goodbye/ 当匹配goodbye时会返回good 因为分支是惰性的,匹配到满足的good后就不会往后匹配了 (匹配完good : 溜了溜了~)
5.例子
- 匹配16进制颜色值:
/#([0-9a-fA-F]{6} | [0-9a-fA-F]{3})/
(注意6次要在前面否则会匹配3次就溜了)
- 匹配24小时时间:
/(\[01][0-9] | \[2][0-3]) : \[0-5][0-9]/
(注意分支符号的位置)
- 日期匹配yyyy-mm-dd:
/[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])/
(未考虑2月应少于30天及大小月天数问题)