文章目录
正则基础
重新整理一下正则知识。
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/) |