正则表达式:贪婪模式(默认模式) VS 非贪婪模式

122 阅读1分钟

需求

匹配标签对

var str = '<div>aa</div>bb<div>cc</div>';

贪婪模式(默认模式)

通过<普通量词>实现。例如,*

正则表达式

var reg = /<(div)>.*<\/\1>/; // \1表示对(div)的引用

// 或写成:
var reg = /<div>.*<\/div>/;

结果

console.log(reg.exec(str))
// 输出:
// ["<div>aa</div>bb<div>cc</div>", "div", index: 0, input: "<div>aa</div>bb<div>cc</div>", groups: undefined]

贪婪模式下,匹配的字符串会尽可能长:"<div>aa</div>bb<div>cc</div>"

非贪婪模式

通过<普通量词>?实现。例如,*?

正则表达式

var reg = /<(div)>.*?<\/\1>/; // \1表示对(div)的引用

// 或写成:
var reg = /<div>.*?<\/div>/;

结果

console.log(reg.exec(str))
// 输出:
// ["<div>aa</div>", "div", index: 0, input: "<div>aa</div>bb<div>cc</div>", groups: undefined]

非贪婪模式下,匹配的字符串会尽可能短:"<div>aa</div>"