在 JavaScript 中,你可以使用正则表达式的量词来匹配特定数量的字符或模式。以下是几种匹配具体数量的方法:
{n}
使用花括号中的数字来指定精确的匹配次数:
// 匹配连续3个a
const regex1 = /a{3}/;
console.log(regex1.test('aa')); // false
console.log(regex1.test('aaa')); // true
console.log(regex1.test('aaaa')); // true (也会匹配,因为它包含3个a)
{n,m}
匹配至少 n 次,最多 m 次:
// 匹配2到4个a
const regex2 = /a{2,4}/;
console.log(regex2.test('a')); // false
console.log(regex2.test('aa')); // true
console.log(regex2.test('aaa')); // true
console.log(regex2.test('aaaa')); // true
console.log(regex2.test('aaaaa')); // true (会匹配前4个a)
{n,}
匹配至少 n 次:
// 匹配至少3个a
const regex3 = /a{3,}/;
console.log(regex3.test('aa')); // false
console.log(regex3.test('aaa')); // true
console.log(regex3.test('aaaa')); // true
JavaScript 也提供了一些简写量词:
*
等价于 {0,}
- 0次或多次+
等价于 {1,}
- 1次或多次?
等价于 {0,1}
- 0次或1次// 匹配0次或多次
const regex4 = /a*/;
// 匹配1次或多次
const regex5 = /a+/;
// 匹配0次或1次
const regex6 = /a?/;
在量词后添加 ?
可以实现非贪婪匹配(匹配尽可能少的字符):
const str = 'aaaaa';
const greedy = /a{2,4}/;
const nonGreedy = /a{2,4}?/;
console.log(str.match(greedy)[0]); // "aaaa" (匹配尽可能多)
console.log(str.match(nonGreedy)[0]); // "aa" (匹配尽可能少)
// 匹配3位数字
const threeDigits = /^\d{3}$/;
console.log(threeDigits.test('123')); // true
console.log(threeDigits.test('12')); // false
// 匹配4-6个字母的单词
const wordRegex = /^[a-zA-Z]{4,6}$/;
console.log(wordRegex.test('word')); // true
console.log(wordRegex.test('longer')); // true
console.log(wordRegex.test('tooLong')); // false
// 匹配"ab"重复2-3次
const abRegex = /(ab){2,3}/;
console.log(abRegex.test('abab')); // true
console.log(abRegex.test('ababab')); // true
console.log(abRegex.test('ab')); // false
记住在需要精确匹配时使用 ^
和 $
锚点来确保匹配整个字符串,而不仅仅是字符串的一部分。