正则表达式 with?
正则表达式 with?
这个问题已经有了答案:
我正在学习Learn Code the Hard Way的正则表达式课程。
其中一个匹配条件是[A-Za-z]+?
。
作者解释说,通过添加?
,此匹配条件将是“非贪婪的”。
然而,我认为以下两个条件是等效的。如果我用它来解析字符串,它不应该总是产生相同的输出吗?
[A-Za-z]+?
[A-Za-z]+
我的观点正确吗?
admin 更改状态以发布 2023年5月21日
实际上,它们并不相同。如果您包含问号“?”,它将匹配尽可能少的字符。以下是一个示例:
var string = 'abcdefg'; alert(string.match(/[A-Za-z]+/));
var string = 'abcdefg'; alert(string.match(/[A-Za-z]+?/));
现在,问号“?”仍然可以匹配多个字符,但仅在必要时,比如这样:
var string = 'abcdefg>'; alert(string.match(/[A-Za-z]+>/));
现在有点混乱了。请查看以下示例,它不包括问号“?”(点字符匹配除空格或换行符之外的所有内容):
var string = 'sldkfjsldkj>'; alert(string.match(/<.+>/));
您可以看到它匹配了所有内容。然而,带有问号“?”时,它只会匹配到第一个“>”。
var string = 'sldkfjsldkj>'; alert(string.match(/<.+?>/));
现在是一个实际应用问号“?”的例子。假设我想匹配 HTML标记之间的所有内容:
var string = 'I\'m strong<\/strong> I\'m not strong I am again.<\/strong>'; alert(string.match(/[\s\S]+<\/strong>/));
正如您所看到的,它匹配了第一个和最后一个标记之间的所有内容。要仅匹配一个,请再次使用救命的问号“?”:
var string = 'I\'m strong<\/strong> I\'m not strong I am again.<\/strong>'; alert(string.match(/[\s\S]+?<\/strong>/));