量词放在原子重复一定次数。它不能单独出现。每个量词都可以指定一个模式必须重复的最小值和最大值。
量词 |
最小值 |
最大值 |
? |
0 |
1 |
* |
0 |
无穷 |
+ |
1 |
无穷 |
{计数} |
计数 |
计数 |
{分钟,} |
最小值 |
无穷 |
{最小值,最大值} |
最小值 |
最大值 |
对于{计数}
,{最小值,}
、和{最小值,最大值}
语法,数字周围不能有空格-否则,它将成为字面意义的模式。
常量re=/a{1,3}/;重新测试(“aa”);//假重新测试(“a{1,3}”);//真的
此行为已在中修复Unicode软件模式,其中大括号不能在没有逃逸.使用的能力{
和}
毫不夸张地说不推荐使用的web兼容性语法,你不应该依赖它。
/a{1,3}/u;//语法错误:正则表达式无效:量词不完整
如果最小值大于最大值,则为语法错误。
/{3,2}/;//语法错误:正则表达式无效:数字在{}限定符中无序
量词可能导致捕获组多次匹配。有关本例中行为的更多信息,请参阅捕获组页面。
每个重复的匹配不一定是相同的字符串。
/[ab]*/.exec(“aba”);//[“阿巴”]
量词是贪婪的默认情况下,这意味着它们会尝试尽可能多次匹配,直到达到最大值,或者直到无法进一步匹配。你可以做一个量词非贪婪通过添加?
在这种情况下,量词将尝试尽可能少地匹配,只有在无法用如此多的重复匹配模式的其余部分时才匹配更多的次数。
/a/.exec(“aaa”);//【aaa】;整个输入被消耗/a*?/。执行官(“aaa”);//['']; 可以不使用字符,但仍能成功匹配/^a*?$/。执行官(“aaa”);//【aaa】;不可能使用更少的字符并且仍然成功匹配
然而,一旦正则表达式在某些索引处成功匹配字符串,它将不会尝试后续索引,尽管这可能会导致使用更少的字符。
/a*?$/。执行官(“aaa”);//【aaa】;匹配在第一个字符处已经成功,因此regex从不尝试在第二个字符处开始匹配
如果不可能与模式的其余部分匹配,贪婪量词可能会尝试更少的重复。
/[ab]+[abc]c/.exec(简称“abbc”);//[英国广播公司]
在这个例子中,[ab]+
第一场贪婪的比赛“abb”
,但是[abc]c(美国广播公司)
无法匹配图案的其余部分(“c”
),因此限定符被减少为仅匹配“ab”
.
贪婪的量词避免匹配无限多的空字符串。如果达到了最小匹配数,并且原子在此位置不再使用字符,那么量词将停止匹配。这就是为什么/(a*)*/.exec(“b”)
不会导致无限循环。
贪婪量词尝试匹配尽可能多的数量次尽可能;它不会最大化长度比赛的胜利。例如,/(aa|aabaac|ba)*/.exec(“aabaac”)
比赛“aa”
然后“吧”
而不是“aabaac”
.
量词适用于单个原子。如果你想量化一个较长的模式或分离,你必须组它。量词不能应用于断言.
/^*/; // 语法错误:正则表达式无效:没有可重复的内容
在Unicode软件模式,前瞻断言可以量化。这是一个不推荐使用的web兼容性语法,你不应该依赖它。
/(?=a)?b/.测试(“b”);//真;前瞻匹配0次