正则表达式中重复匹配靠、+、?和{}四个限定符,均需紧贴目标元素;(0次或多次)、+(1次或多次)、?(0或1次)为基本限定符,{}用于精确控制次数,且默认贪婪、加?可转惰性。

正则表达式中设置重复匹配次数,主要靠四个核心限定符:*、+、? 和 {}。它们都必须紧贴在目标字符或子表达式后面,不能单独使用。
基础限定符:快速控制常见范围
这些符号简洁高效,适合大多数日常场景:
-
* 表示“零次或多次”,等价于
{0,}。例如\d*可匹配空字符串、"5"、"428" 等任意长度数字串(包括无数字)。 -
+ 表示“一次或多次”,等价于
{1,}。例如[a-z]+要求至少一个英文小写字母,不接受空匹配。 -
? 表示“零次或一次”,等价于
{0,1}。例如https?可同时匹配 "http" 和 "https"。
精确控制:用 {} 指定具体数量
当需要明确约束位数或区间时,花括号是最直接的方式:
-
{n}:必须恰好出现 n 次。如\w{6}只匹配长度为 6 的单词或用户名。 -
{n,m}:出现次数在 n 到 m 之间(含两端)。如[0-9]{3,5}匹配 3~5 位连续数字,适合提取电话分机号。 -
{n,}:至少出现 n 次,无上限。如.{8,}常用于密码最小长度校验。
避免过度匹配:贪婪 vs 惰性
默认所有重复限定符(*、+、{n,} 等)都是贪婪模式——尽可能吃掉更多字符。若后续匹配失败,它会回退让出部分字符。
加一个 ? 在其后,即可切换为惰性(勉强)模式:
-
.*是贪婪的,.*?就变成“能少匹配就少匹配”。比如在 HTML 中提取<p>内容</p>,用<p>(.*?)</p>才不会跨标签误吞。 -
\d+?匹配单个数字就停,而\d+会一直吃到下一个非数字为止。
注意事项
使用时需留意几个细节:
-
{}是元字符,如果真要匹配字面意义的大括号,必须转义:如\{abc\}。 - 写
{3, }时逗号后可有空格,但部分引擎(如早期 JavaScript)可能不支持,建议统一写成{3,}。 - 限定符只作用于它前面**紧邻的一个元素**,想重复整个组,要用括号包裹:如
(ab)+匹配 "ababab",而ab+只匹配 "abbb"。











