我看到以下代码:
> '<a> <strong>'.match(/^(.*)>/)[1] //greedy
'a> <strong'
> '<a> <strong>'.match(/^<(.*?)>/)[1] //reluctant
'a'
我无法理解*
和*?
之间的区别。
我也可以这样使用吗?
*???
或*?+
如果我能这样做,请解释一下。谢谢。
答案 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