文章目录
正则基础
重新整理一下正则知识。
String.match(RegExp) 字符串匹配正则方法 match,如果匹配成功,会返回一个数组,第一项表示整个正则 (regexp) 匹配到的内容,其余表示所有捕获组。匹配不成功返回 null。
match 返回的这个数组上有几个自定义属性:
- input 表示被用于匹配的整个字符串。
- index 表示被匹配到的字符串在整个字符串的位置。
- groups 表示自定义名称的捕获组,如果没有对捕获组定义自定义名称,得到 undefined。否则为一个对象。
捕获
() 匿名捕获组,如果在 /(这里)/ 被匹配到,会返回到 match 得到的数组中,在字符串的 replace 方法中,可以用 $n 来表示第几个捕获组,n 从 1 开始,表示第一个捕获组。
(?:) 非捕获组,如果在 /(?:)/ 被匹配到,也不会返回到 match 得到的数组中,但正则仍然需要匹配到它,只是不返回到数组中。
(?<name>) 具名捕获组,replace 中可以用 $<name> 来取得匹配内容替换的字符串。
环视断言
(?<后顾)X(?前瞻),前瞻后顾是相对与 X 来讲的,X 在前面就是前瞻,X在后面就是后顾。
注意:断言不会消耗匹配内容,仅仅起到条件匹配作用。
| 模式 | 类型 | 匹配 |
|---|---|---|
x(?=y) |
前瞻肯定断言 | 匹配 y 前的 x |
x(?!y) |
前瞻否定断言 | 匹配不在 y 前的 x |
(?<=y)x |
后顾肯定断言 | 匹配在 y 后的 x |
(?<!y)x |
后顾否定断言 | 匹配不在 y 后的 x |
例子
1 | 'a123b'.match(/a(?<=a)(?<first>1)(?:(2)3)(?=b)b/) |



