1、横向匹配,量词
{m, n} | 前一个字符重复的次数 |
{m} = {m, m} | 出现 m 次 |
{m,} | 出现大于等于 m 次 |
? | {0,1} |
+ | {1,} |
* | {0} |
2、纵向匹配,范围
[abc], [a-c], [1,23],[1-3] | 前一个字符的可选 |
[^abc], [^a-c] | 前一个字符的不可选 |
\d | [0-9] |
\D | [^0-9] |
\w | [a-zA-z0-9_] |
\W | [^a-zA-z0-9_] |
\s | [ \\t\\v\\n\\r\\f] 空格,水平制表符,垂直制表符,换行符,回车符,换页符 |
\S | [^ \\t\\v\\n\\r\\f] |
. | 表示几乎任意字符,除了换行,回车,行分割符,段落分隔符之外 |
|
|
如何表示任意字符: [\d\D], [\w\W], [\s\S], [^]
3、多选分支
使用管道符 “|” 分割的,就是多选分支
例如 p1|p2|p3,表示匹配 p1 或者 p2 或者 p3
这里要特别注意,多选分支也是惰性的,
所以, 'goodbye'.match(/goodbye|bye/)=[‘goodbye']
但是 'goodbye'.match(/(goodbye|bye)/)=[‘goodbye’, ‘goodbye’]
这是为啥?括号的影响是啥
4、贪婪匹配、惰性匹配、独占模式
贪婪和惰性都是相对于量词的,
默认是贪婪模式,即会尽量匹配量词最大的情况
惰性匹配是在量词后面加个?(ps:注意??这种惰性匹配,其实是相对于?,且尽量 0 个)
独占模式,是在量词后面加个+,效果为取量词最大匹配,并且不回溯,但是我发现一个神奇的现象,和网上说的不一样的是,除了.后面能加+,其他所有的都报语法错误。很是无语。暂时我也用不到,如果有一天需要用到这么复杂的正则的时候再来研究为啥吧