3. 正则表达式必知必会-匹配一组字符
3.1 匹配多个字符中的某一个
只想匹配 na sa,不想匹配其他的。
const str =
'sales1.xls
' +
'orders3.xls
' +
'sales2.xls
' +
'sales3.xls
' +
'apac1.xls
' +
'europe2.xls
' +
'na1.xls
' +
'na2.xls
' +
'ca1.xls
' +
'sa1.xls';
const reg = /.a..xls/g;
let match;
while ((match = reg.exec(str))) {
console.log(match[0]);
}
// na1.xls
// na2.xls
// ca1.xls <-- 会匹配到除 na sa 之外的
// sa1.xls
使用元字符[和]来定义一个字符集合。
const str =
'sales1.xls
' +
'orders3.xls
' +
'sales2.xls
' +
'sales3.xls
' +
'apac1.xls
' +
'europe2.xls
' +
'na1.xls
' +
'na2.xls
' +
'ca1.xls
' +
'sa1.xls';
const reg = /[ns]a..xls/g; // <-- 使用了 [] 定义一个字符集
let match;
while ((match = reg.exec(str))) {
console.log(match[0]);
}
// na1.xls
// na2.xls
// sa1.xls
3.2 利用字符集合区间
只想筛选出 sa1 na1 na2 等,但是会筛选出 sam。
const str =
'sales1.xls
' +
'orders3.xls
' +
'sales2.xls
' +
'sales3.xls
' +
'apac1.xls
' +
'europe2.xls
' +
'na1.xls
' +
'na2.xls
' +
'ca1.xls
' +
'sam.xls
' +
'sa1.xls';
const reg = /[ns]a..xls/g;
let match;
while ((match = reg.exec(str))) {
console.log(match[0]);
}
// na1.xls
// na2.xls
// sam.xls <-- 会筛选出 sam.xls
// sa1.xls
设定一个字符集,只匹配 sa1 na1 等。
const str =
'sales1.xls
' +
'orders3.xls
' +
'sales2.xls
' +
'sales3.xls
' +
'apac1.xls
' +
'europe2.xls
' +
'na1.xls
' +
'na2.xls
' +
'ca1.xls
' +
'sam.xls
' +
'sa1.xls';
const reg = /[ns]a[0123456789].xls/g; // <-- 设定 [0123456789] 字符集
let match;
while ((match = reg.exec(str))) {
console.log(match[0]);
}
// na1.xls
// na2.xls
// sa1.xls
正则表达式提供了一个元字符 -(连字符)来定义字符区间。
const str =
'sales1.xls
' +
'orders3.xls
' +
'sales2.xls
' +
'sales3.xls
' +
'apac1.xls
' +
'europe2.xls
' +
'na1.xls
' +
'na2.xls
' +
'ca1.xls
' +
'sam.xls
' +
'sa1.xls';
const reg = /[ns]a[0-9].xls/g; // <-- 用连字符 - 定义字符区间
let match;
while ((match = reg.exec(str))) {
console.log(match[0]);
}
// na1.xls
// na2.xls
// sa1.xls
- A-Z 匹配从 A 到 Z 的所有大写字母
- a-z 匹配从 a 到 z 的所有小写字母
- A-z 匹配从 ASCII 字符 A 到 ASCII 字符 z 的所有字母。
A-z 这个模式不常用,因为它还包含了 [ 和 ^ 等在 ASCII 字符表里排列在 Z 和 a 之间的字符。
3.3 取非匹配
除了字符集里的字符,其他都可以匹配。
用元字符 ^ 来表示对一个字符集取非。
const str =
'sales1.xls
' +
'orders3.xls
' +
'sales2.xls
' +
'sales3.xls
' +
'apac1.xls
' +
'europe2.xls
' +
'na1.xls
' +
'na2.xls
' +
'ca1.xls
' +
'sam.xls
' +
'sa1.xls';
const reg = /[ns]a[^0-9].xls/g; // <-- 对字符集 [0-9] 取非
let match;
while ((match = reg.exec(str))) {
console.log(match[0]);
}
// sam.xls