贪婪模式:在正则表达式中,贪婪模式是默认的模式。它会尽可能多地匹配符合模式的字符串。在量词后添加问号"?"可以将贪婪模式转换为非贪婪模式。
例如,/a.*b/表示贪婪模式,会匹配尽可能多的字符。
非贪婪模式:在正则表达式中,非贪婪模式通过在量词后添加问号"?"来定义。它会尽可能少地匹配符合模式的字符串。例如,/a.*?b/表示非贪婪模式,会匹配尽可能少的字符。
代码示例:
const pattern = /a.*b/; // 贪婪模式
const patternNonGreedy = /a.*?b/; // 非贪婪模式
const string = 'abbbbabbbb';
const result = string.match(pattern);
console.log(result); // 输出 ["abbbbabbbb"]
const resultNonGreedy = string.match(patternNonGreedy);
console.log(resultNonGreedy); // 输出 ["ab"]
在上面的示例中,我们使用正则表达式模式a.*b和a.*?b来匹配字符串abbbbabbbb。a.*b使用了贪婪模式,而a.*?b使用了非贪婪模式。
贪婪模式:a.*b会尽可能多地匹配字符b之前的任意字符a,因此最终匹配到的字符串是abbbbabbbb。
非贪婪模式:a.*?b会尽可能少地匹配字符b之前的任意字符a,因此最终匹配到的字符串是ab。在非贪婪模式下,只匹配到了第一个满足条件的字符串ab,而没有匹配到后面的abbbb。