11-重复
17.10 重复
重复元字符允许指定匹配目标重复出现的次数。回想一下之前匹配单个数字的例子。如果要匹配数字(可能由多个连续的数字组成)呢?可以用一个前面提到的方法来实现:
const match = beer99.match(/[0-9][0-9][0-9]|[0-9][0-9]|[0-9]/);
这里要注意如何在匹配不太特殊的字符串(两位数字)之前,必须先匹配最特殊的字符串(三位数字)。这对一位、两位或三位数字都是可行的,但当需要匹配四位数字时,分支也必须加入对4位数字的匹配。幸运的是,有一种更好的写法:
const match = beer99.match(/[0-9]+/);
注意字符组后面的+:它表示前一个元素应该至少匹配一次。“前一个元素”通常会困扰初学者。重复元字符是一种用来修饰它前面元素的修饰器。它们不会(且不能)单独出现。一共有5种重复修饰符,如表17-2所示。
| 重复修饰符 | 描 述 | 示 例 | | :----- | :----- | :----- | :----- | :----- | | {n} | 精确n次 | /d{5}/ 匹配5位数字(例如zip码)。 | | {n, } | 至少n次 | /\d{5,}/ 匹配5位或5位以上的数字。 | | {n, m} | 最少n次,最多m次 | /\d{2,5}/匹配2到5位数字。 | | ? | 0或1次,等价于{0, 1} | /[a-z]\d?/i匹配跟随了0个或一个数字的字符。 | | | 0次或多次(有时称为“Klene星号”或“Klene闭包”) | /[a-z]\d/i 匹配跟随了0个或多个数字的字母。 | | + | 1次或多次 | /[a-z]\d+/i 匹配至少跟随一个数字的字母 |