量词:*,+?,{n} {n,},{n,m}

基线 广泛可用

此功能已得到很好的建立,可在许多设备和浏览器版本中使用。从那时起,它就可以跨浏览器使用了 2015年7月.

A类量词重复原子一定次数。量词位于它所应用的原子之后。

语法

正则表达式
//贪婪原子?原子*原子+原子{计数}原子{min,}原子{最小值,最大值}//非自由原子??原子*?原子+?原子{count}?原子{min,}?原子{最小值,最大值}?

参数

原子

一张单人床原子.

计数

非负整数。原子应该重复的次数。

最小值

非负整数。原子可以重复的最小次数。

最大值 可选

非负整数。原子可以重复的最大次数。如果省略,原子可以根据需要重复多次。

描述

量词放在原子重复一定次数。它不能单独出现。每个量词都可以指定一个模式必须重复的最小值和最大值。

量词 最小值 最大值
? 0 1
* 0 无穷
+ 1 无穷
{计数} 计数 计数
{分钟,} 最小值 无穷
{最小值,最大值} 最小值 最大值

对于{计数},{最小值,}、和{最小值,最大值}语法,数字周围不能有空格-否则,它将成为字面意义的模式。

js公司
常量re=/a{1,3}/;重新测试(“aa”);//重新测试(“a{1,3}”);//真的

此行为已在中修复Unicode软件模式,其中大括号不能在没有逃逸.使用的能力{}毫不夸张地说不推荐使用的web兼容性语法,你不应该依赖它。

js公司
/a{1,3}/u;//语法错误:正则表达式无效:量词不完整

如果最小值大于最大值,则为语法错误。

js公司
/{3,2}/;//语法错误:正则表达式无效:数字在{}限定符中无序

量词可能导致捕获组多次匹配。有关本例中行为的更多信息,请参阅捕获组页面。

每个重复的匹配不一定是相同的字符串。

js公司
/[ab]*/.exec(“aba”);//[“阿巴”]

量词是贪婪的默认情况下,这意味着它们会尝试尽可能多次匹配,直到达到最大值,或者直到无法进一步匹配。你可以做一个量词非贪婪通过添加?在这种情况下,量词将尝试尽可能少地匹配,只有在无法用如此多的重复匹配模式的其余部分时才匹配更多的次数。

js公司
/a/.exec(“aaa”);//【aaa】;整个输入被消耗/a*?/。执行官(“aaa”);//['']; 可以不使用字符,但仍能成功匹配/^a*?$/。执行官(“aaa”);//【aaa】;不可能使用更少的字符并且仍然成功匹配

然而,一旦正则表达式在某些索引处成功匹配字符串,它将不会尝试后续索引,尽管这可能会导致使用更少的字符。

js公司
/a*?$/。执行官(“aaa”);//【aaa】;匹配在第一个字符处已经成功,因此regex从不尝试在第二个字符处开始匹配

如果不可能与模式的其余部分匹配,贪婪量词可能会尝试更少的重复。

js公司
/[ab]+[abc]c/.exec(简称“abbc”);//[英国广播公司]

在这个例子中,[ab]+第一场贪婪的比赛“abb”,但是[abc]c(美国广播公司)无法匹配图案的其余部分(“c”),因此限定符被减少为仅匹配“ab”.

贪婪的量词避免匹配无限多的空字符串。如果达到了最小匹配数,并且原子在此位置不再使用字符,那么量词将停止匹配。这就是为什么/(a*)*/.exec(“b”)不会导致无限循环。

贪婪量词尝试匹配尽可能多的数量尽可能;它不会最大化长度比赛的胜利。例如,/(aa|aabaac|ba)*/.exec(“aabaac”)比赛“aa”然后“吧”而不是“aabaac”.

量词适用于单个原子。如果你想量化一个较长的模式或分离,你必须它。量词不能应用于断言.

js公司
/^*/; // 语法错误:正则表达式无效:没有可重复的内容

Unicode软件模式,前瞻断言可以量化。这是一个不推荐使用的web兼容性语法,你不应该依赖它。

js公司
/(?=a)?b/.测试(“b”);//真;前瞻匹配0次

示例

删除HTML标记

以下示例删除尖括号中的HTML标记。注意使用?以避免一次使用太多字符。

js公司
功能条标签(str){返回str.replace(/<.+?>/g,“”);}stripTag(“<p><em>lorem</em><strong>ipsum</strong></p>”);//'洛伦·伊普苏姆

贪婪的匹配也可以达到同样的效果,但不允许重复的模式匹配>.

js公司
功能条标签(str){返回str.replace(/<[^>]+>/g,“”);}stripTag(“<p><em>lorem</em><strong>ipsum</strong></p>”);//'lorem ipsum'

警告:这只是为了演示,不适用>在属性值中。请使用适当的HTML消毒剂。

定位降价段落

在“降价”中,段落由一个或多个空行分隔。下面的示例通过匹配两个或多个换行符来统计字符串中的所有段落。

js公司
函数countParagraphs(str){返回str.match(/(?:\r\n?\n){2,}/g).length+1;}count段落(`第1段第2段包含一些换行符,但仍然是相同的段落另一段`); // 

警告:这仅用于演示-它不处理代码块或其他Markdown块元素(如标题)中的换行。请使用适当的标记解析器。

规格

规范
ECMAScript语言规范
#prod-量词

浏览器兼容性

BCD表仅在浏览器中加载

另请参见