正则表达式中三种括号的详细解读
三种括号的含义 [ ], { }, ( )
1. 中括号[ ]: 匹配 单个字符 是否属于中括号中的一个字符
字符串: hello world!!
js正则表达式: /[eor]/g
匹配到的内容是: h e ll o w o r ld
中括号中有两个特殊, 连接符号 - 和 取反符号 ^
-
连接符 - 根据ASCII表的值 从小到大 中间的范围 (左边ASCII值必须小于右边ASCII的值)
- [0-9] 表示 0到9 之间的数 包括 0 和 9
- [3-6] 表示 3到6 之间的数 包括 3 和 6
- [a-z] 表示 a-z 之间所有的字母 包含 a 和 z
- [A-Z] 表示 A-Z 之间所有的字母 包含 A 和 Z
- [0-9A-Z] 表示 0 到 9 和 大写A 到 大写 Z 中间所有字符
- [!-/] 表示 ASCII 表中 ! 到 / 之间的所有字符 包含 ! 和 / 字符
-
取反符号 ^ 紧跟在^后的一个字符, 则不匹配
- [^a] 表示不匹配 a 字符
- [^abc] 表示不匹配 a 字符
- [\^\] 表示不匹配 ^ 和 \ 字符
- [^4-5] 表示不匹配 4 到 5 之间的数字包括 4 和 5 也不匹配
- [b-d1-3^5] 表示不匹配b c d 1 2 3 5 这几个字符
值得一提, 中括号中的特殊符号也会认为是字符 比如 <>, (), {} 都会被看作字符的括号而非特殊含义, ^ - \ 这个三个特殊符号保留特殊含义, 想要匹配^ - \ 则使用\^, \-, \\
2. 大括号{ }, 用于重复次数, 大括号左边表达式的匹配次数
字符串: hello world!!
js正则表达式: /l{2}/g
匹配到的内容是: he ll o world!!
- a{1, 4} 匹配 a 字符 1 到 4次 如 a aa aaa aaaa
- [0-9]{3} 匹配连续 3 个数字
- [a-z]{1,} 匹配小写字母字符 1次到无数次
- [a-z]{,5} 匹配小写字母字符 最多5次
3. 小括号( ), 表示一个子表达式
字符串: hello world!!
js正则表达式: /(ell)/g
匹配到的内容是: h ell o world!!
此处注意, 如果字符串是helo 则是匹配不到任何内容的
小括号中的内容是一个完整的正则表达式
- (ha){2} 匹配 内容为haha
- ((ha){2} hello) 匹配到的内容为: haha hello
- (a | b){2} 能够匹配到的内容为 aa bb ab ba
子表达式可以很复杂, 这样多个子表达式组合起来, 可以匹配出规则很复杂的字符串
补充
(?=), (?!), (?<=), (?<!) 这四种写法属于含义比较特殊的子表达式, 为预查表达式 和 ( ) 的含义有所不同
后面会再写一篇来详细解读预查表达式