Lookahead and lookbehind

Lookahead (nhìn trước)

Cú pháp là: X(?=Y)  có nghĩa là: khớp X nếu sau X có Y

//Lookahead nhìn thẳng
 var str = "1 turkey costs 30€"; 

 alert( str.match(/\d+(?=€)/) ); // 30,  tìm digit number nếu sau nó là € 


// lồng nhau ( 2 điều kiện)

var str = "1 turkey costs 30€";

alert( str.match(/\d+(?=\s)(?=.*30)/) ); // 1  , tìm digit number nếu sau đó là khoản trắng và tiếp đó là dãy số và 30

 

Phủ định nhìn trước (Negative lookahead)

Cú pháp là:, X(?!Y) có nghĩa là "tìm kiếm X nếu phí sau không tồn tại Y

let str = "2 turkeys cost 60€";

alert( str.match(/\d+\b(?!€)/g) ); // 2 \b là biên \W

Lookbehind ( nhìn sau biểu thức)

Cú pháp: (?<=Y)X phù hợp X, nhưng chỉ khi có Y trước nó.

Cú pháp: (?<!Y)X phù hợp X, nhưng chỉ khi không có Ytrước nó.

var str = "1 turkey costs $30";

// the dollar sign is escaped \$
alert( str.match(/(?<=\$)\d+/) ); // 30 (tìm 1 chữ số nếu phía trước có ký hiệu $ )



var str = "2 turkeys cost $60";

alert( str.match(/(?<!\$)\b\d+/g) ); // 2 (tìm 1 chữ số nếu phía trước không có ký hiệu $ )

Capturing groups (nhóm)

var str = "1 turkey costs 30€ ";
var regexp = /\d+(?=(€|kr))/; // extra parentheses around €|kr

console.log( str.match(regexp) ); 
// (2)
		//0: "30"
		//1: "€"
		
		
var str = "1 turkey costs $30";
var regexp = /(?<=(\$|£))\d+/;

console.log( str.match(regexp) ); 

// (2)
		//0: "30"
		//1: "$"

CÁC VÍ DỤ:


// tìm số nếu phía trước không có dấu trừ

var regexp = /(?<!-)\d+/g;

var str = "0 12 -5 123 -18";

alert( str.match(regexp) ); // 0, 12, 123, 8


// tìm số nếu phía trước không có dấu trừ nằm trong dãy

var regexp = /(?<![-\d])\d+/g;

var str = "0 12 -5 123 -18";

alert( str.match(regexp) ); // 0, 12, 123

//lookbehind


var str = '...<body style="...">...';
str = str.replace(/<body.*?>/, '$&<h1>Hello</h1>');  //$& là lấy lại giá trị replace

alert(str); // ...<body style="..."><h1>Hello</h1>...



var str = '...<body style="...">...';
str = str.replace(/(?<=<body.*?>)/, '<h1>Hello</h1>'); 

alert(str); // ...<body style="..."><h1>Hello</h1>...