正则表达式量词
量词表示要匹配的字符或表达式的数量。
x*
将前面的项"x"
匹配 0 次或更多次。例如,/bo*/
匹配"A ghost booooed"
中的"boooo"
和"A bird warbled"
中的"b"
,但在"A goat grunt"
中没有匹配。
x+
将前一项"x"
匹配 1 次或更多次。等价于{1,}
。例如,/a+/
匹配"candy"
中的"a"
和"caaaaaaandy"
中的"a"
。
x?
将前面的项"x"
匹配 0 或 1 次。例如,/e?le?/
匹配 angel
中的 el
和 angle
中的 le
。
如果立即在任何量词*、+、?或{}之后使用,则使量词是非贪婪的 (匹配最小次数),而不是默认的贪婪的 (匹配最大次数)。
x{n}
其中"n"
是一个正整数,与前一项"x"
的 n 次匹配。例如,/a{2}/
不匹配"candy"
中的"a"
,但它匹配"caandy"
中的所有"a"
,以及"caaandy"
中的前两个"a"
。
x{n,}
其中,"n"
是一个正整数,与前一项"x"
至少匹配"n"
次。例如,/a{2,}/
不匹配"candy"
中的"a"
,但匹配"caandy"
和"caaaaaaandy"
中的所有 a
。
x{n,m}
其中,"n"
是 0 或一个正整数,"m"
是一个正整数,m > n。 至少与前一项"x"
匹配"n"
次,最多匹配"m"
次。例如,/a{1,3}/
不匹配"cndy"
中的"a"
,"candy"
中的"a"
,"caandy"
中的两个"a"
,以及"caaaaaaandy"
中的所有"a"
。注意,当匹配"caaaaaaandy"
时,匹配的是"aaa"
,即使原始字符串中有更多的"a"
。
x*?
x+?
x??
x{n}?
x{n,}?
x{n,m}?
默认情况下,像 * 和 + 这样的量词是”贪婪的”,这意味着它们试图匹配尽可能多的字符串。量词后面的字符?使量词”非贪婪”:意思是它一旦找到匹配就会停止。例如,给定一个字符串"some <foo> <bar> new </bar> </foo> thing"
:
/<.*>/ ["<foo> <bar> new </bar> </foo>"] /<.*?>/ ["<foo>", "<bar>", "</bar>", "</foo>"]