我可以使用多少量词?

时间:2014-08-12 03:57:01

标签: javascript

我看到以下代码:

> '<a> <strong>'.match(/^(.*)>/)[1] //greedy
   'a> <strong'
> '<a> <strong>'.match(/^<(.*?)>/)[1] //reluctant
   'a'

我无法理解**?之间的区别。

我也可以这样使用吗?

*???*?+

如果我能这样做,请解释一下。谢谢。

2 个答案:

答案 0 :(得分:1)

*?不是*?的组合。它是一个执行惰性匹配的单个运算符:它不是尝试消耗尽可能多的输入,而是尽可能少地消耗。来自MDN

  

如果在任何量词*,+,?或{}之后立即使用,则使量词非贪婪(匹配尽可能少的字符),而不是默认值,即贪婪(匹配尽可能多的字符)可能)。例如,将/ \ d + /应用于“123abc”匹配“123”。但是将/ \ d +?/应用于同一个字符串只匹配“1”。

对于x*???x*?+,它们不是有效的正则表达式。如果我尝试使用它们,我会收到错误。

答案 1 :(得分:0)

来自MDN

* - Matches the preceding character 0 or more times. Equivalent to {0,}.

所以。*基本上匹配原始字符串中的所有内容。 &lt;和&gt;字符被遗漏,因为它们是特殊字符,需要分隔。因此,'a> <strong'

的结果
? - Matches the preceding character 0 or 1 time. Equivalent to {0,1}.

现在。?意思是:。匹配前面的字符串,然后是?生效并说匹配字符串的第一个字符。因此,a

的结果

现在你的另一个问题。这两个表达式都不是有效的,因为附加的问号/加号会在解析时导致错误。

您可以测试表达式here