正则表达式:集合和范围

摘要:在本教程中,您将学习正则表达式中的集合和范围。

集合

方括号搜索集合中的任何字符。例如,[aeiou] 匹配五个字符中的任何一个:'a''e''i''o''u'[...] 称为集合。

例如,正则表达式 /[cbr]ats/g 匹配 catsbatsrats

let str = 'How cats, rats, and bats became Halloween animals';
let re = /[cbr]ats/g;
let results = str.match(re);

console.log(results);Code language: JavaScript (javascript)

输出

["cats", "rats", "bats"]Code language: JavaScript (javascript)

范围

方括号可以包含字符范围。例如,[a-z] 是从 az 的字符范围。而 [0-9] 是从 0 到 9 的数字。

[a-zA-Z0-9_] 等同于 \w[0-9] 等同于 \d

排除范围

要否定范围,可以使用排除范围,如:[^...]

例如,[^0-9] 匹配除数字之外的任何字符。它等同于 \D

或者,[^aeiou] 匹配除 'a''e''i''o''u' 之外的任何字符。

转义特殊字符

通常,您使用反斜杠来转义特殊字符,例如 \.。但是,在方括号中,您不需要转义大多数特殊字符,除非它们对方括号有意义。

例如,如果插入符 (^) 位于字符串的开头,则需要转义它

[\^#$]Code language: JavaScript (javascript)

如果插入符不在字符串的开头 (^),则不需要转义它

[#^$]Code language: JavaScript (javascript)

标志 u

如果集合包含代理对,则需要将标志 u 添加到正则表达式中才能使其正常工作

let result = 'It is 🍎'.match(/[🍎🍅🍓]/);

console.log(result);Code language: JavaScript (javascript)

输出

["�"]Code language: JavaScript (javascript)

在此示例中,[🍎🍅🍓] 有六个字符,而不是三个

let str = '🍎🍅🍓';

for(let i=0; i<str.length; i++) {
    console.log(str.charCodeAt(i));
}Code language: JavaScript (javascript)

输出

55356
57166
55356
57157
55356
57171Code language: JavaScript (javascript)

如果添加标志 u,则行为将正确

let result = 'It is 🍎'.match(/[🍎🍅🍓]/u);

console.log(result);Code language: JavaScript (javascript)

输出

["🍎"]Code language: JavaScript (javascript)

总结

  • 使用 [...] 来构建一个集合,以匹配其中的任何字符。
  • 使用集合内的 - 来构建一个范围,以匹配该范围内的任何字符。
  • 使用 ^ 来否定范围。
本教程是否有帮助?