Lookahead and lookbehind
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>...