前言
此篇文章主要对部分易错的元字符进行梳理,主要包括[],\b和\B,()。
一. 字符集合([])
const str = 'plain';
const rg = /[ain]/g;
const res = str.match(rg);
console.log(res); // [ 'a', 'i', 'n' ]
匹配所包含的任意一个字符。
重点:
- 一次只能匹配一个字符;
- 或的逻辑,/[ain]/g 相当于 /a | i | n/g,匹配符合条件的任一 一项均可。
常常搭配^使用
const str = 'plain';
const rg = /[^ain]/g;
const res = str.match(rg);
console.log(res); // [ 'p', 'l' ]
还是只匹配一项,且匹配的该项不能是条件的任意一 一项。
二. 单词边界和非单词边界
\b: 匹配一个单词边界,也就是指单词和非单词的位置。
\B: 匹配非单词边界。‘er\B’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’。
三. ()
const str = 'js-pLus';
const rg = /-(p)(L)/g;
const res = str.replace(rg, (node, $1, $2) => {
console.log($1, $2); // p, L
const tempItem = `-${$1.toUpperCase()}${$2.toLowerCase()}`;
return tempItem;
});
console.log(res); // js-Plus
匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合
const str = 'aabb1233ccff';
const rg = /([a-z])\1([a-z])\2/g;
const res = str.match(rg);
console.log(res, 'res'); // [ 'aabb', 'ccff' ]
在JScript 中则使用 $0…$9 属性。要匹配圆括号字符,请使用 ‘(’ 或 ‘)’,且具有对匹配到的具体字符的记忆功能:
\1表示重复正则第一个圆括号内匹配到的内容
\2表示重复正则第二个圆括号内匹配到的内容
比如有以下正则:
([a-z])([a-z])\2\1
则可以匹配字符串abba