x{n,}
Where n is a positive integer. Matches at least n
occurrences of the preceding item x.
For example, /a{2,}/ doesn't match the "a" in "candy",
but matches all of the a's in "caandy" and in "caaaaaaandy".
和
(x)
Matches x and remembers the match. These are called capturing groups.
基于这两条信息,我假设以下
elmt1 = 'aba'
elmt1.match(/(.){2,}/g)
通常会返回null
,因为我之前附上了该字符,并要求它至少返回2次。
我认为
elmt1 = 'aab'
elmt1.match(/(.){2,}/g)
通常会返回'aa'
但是,此方法始终返回所有内容,即整个字符串。 我有点困惑,因为在我看来它与文档中的内容相矛盾。
有人可以向我解释为什么这个正则表达式会返回所有内容吗?
谢谢大家!
答案 0 :(得分:2)
我认为您希望(.)
能够记住匹配的第一个字符,并(.){2,}
来匹配该特定字符的至少2次出现,但这不是它的工作方式。 (.)
会记住匹配并保存的字符,如果您想使用它,则必须使用\1
(或\2
或\3
...在哪个组你想要的。)
此外,您不应将量词应用于捕获组,因为它导致的行为几乎总是不是您想要的行为(该组匹配所有字符但只记住最后一个字符)。
在这种情况下,你想要的是(.)\1+
,意思是:匹配任何一个字符后跟同一个字符,一次或多次。
答案 1 :(得分:1)
量词将组内容重新应用为正则表达式,而不是匹配。这并不是因为a
与.
匹配,因此您将获得a
。您将获得2个或更多.
,这意味着任何两次或更多次。
这与后引用不同,例如\1
,它将引用第1组匹配的内容。
答案 2 :(得分:1)
/.{2,}/
相当于/..|...|....|.....|…/
。因此,你的正则表达式将匹配任何东西,但单个字母(或空字符串)。