Chúng ta tạm hiểu:

Tối đa là:  Greedy

Tối thiểu là : lazy

CHẾ ĐỘ Greedy 

Xét ví dụ sau:

let regexp = /".+"/g;

let str = 'a "witch" and her "broom" is one';

alert( str.match(regexp) ); // "witch" and her "broom"

Ví dụ trên hoạt động không chính xác vì chúng ta chỉ cần lấy 2 giá trị:

"witch""broom" và kết quả là "witch" and her "broom"

Biểu thức trên được gọi là Tối đa( tham lam)

Chúng ta sẽ chuyển chúng thành biếu thức tối thiểu

 

CHẾ ĐỘ Lazy: (kích hoạt bằng dấu hỏi sau bộ định lượng)

let regexp = /".+?"/g;

let str = 'a "witch" and her "broom" is one';

alert( str.match(regexp) ); // "witch", "broom"

Biểu thức trên hoạt động .+?  <==>  .{1,}?

+? được gọi là định lượng tối thiểu nó chỉ lấy đến kết quả phù hợp ít nhất

Các bộ định lượng tối thiểu khác:

+?
*?
??

Ví Dụ:

alert( "123 456".match(/\d+ \d+?/) ); // 123 4

KHÔNG DÙNG BỘ ĐỊNH LƯỢNG ( DÙNG RANGE)

let regexp = /"[^"]+"/g; // dãy ngoại trừ dấu nháy kép

let str = 'a "witch" and her "broom" is one';

alert( str.match(regexp) ); // "witch", "broom"

TỔNG HỢP CÁC VÍ DỤ:

//1. Chế độ Tối Đa
var str = '...<a href="link" class="doc">...';
var regexp = /<a href=".*" class="doc">/g;

// Hoạt động
alert( str.match(regexp) ); // <a href="link" class="doc">


// 1.2 Chế Độ Tối Đa
var str = '...<a href="link1" class="doc">... <a href="link2" class="doc">...';
var regexp = /<a href=".*" class="doc">/g;

// Sai ! trong kết quả có cả 2 dấu chấm
alert( str.match(regexp) ); // <a href="link1" class="doc">... <a href="link2" class="doc">



// 2 Chế Độ Tối Thiểu (Lazy)

var str = '...<a href="link1" class="doc">... <a href="link2" class="doc">...';
var regexp = /<a href=".*?" class="doc">/g;

// Hoạt Động!
alert( str.match(regexp) ); // <a href="link1" class="doc">, <a href="link2" class="doc">


//2.1 chế độ tối thiểu (lazy)

var str = '...<a href="link1" class="wrong">... <p style="" class="doc">...';
var regexp = /<a href=".*?" class="doc">/g;

// sai!
alert( str.match(regexp) ); // <a href="link1" class="wrong">... <p style="" class="doc">


//2.2 fix lỗi trên

var str1 = '...<a href="link1" class="wrong">... <p style="" class="doc">...';
var str2 = '...<a href="link1" class="doc">... <a href="link2" class="doc">...';
var regexp = /<a href="[^"]*" class="doc">/g;

// Hoạt động!
alert( str1.match(regexp) ); // null, no matches, that's correct
alert( str2.match(regexp) ); // <a href="link1" class="doc">, <a href="link2" class="doc">