9. 正则表达式必知必会-前后查找
9.1 前后查找
把 Web 页面的标题提取出来。
const str = '<head><title>My homepage.</title></head>';
const reg = /<title>.*?<\/title>/;
console.log(reg.exec(str)[0]); // <title>My homepage.</title> <-- 多找出了 <title> 和 </title>
9.2 向前查找
向前查找指定了一个必须匹配但不在返回结果中的模式。用 ?= 表示。
const str = 'http://wendys-site.com';
const reg = /.+(?=:)/;
console.log(reg.exec(str)[0]); // "http"
9.3 向后查找
用 ?<= 表示。
提取每个产品的价格:
const str = 'A: $1.1 B: $2 C: $3';
const reg = /(?<=\$)[\d\.]+/g; // <-- 向后查找
let match;
while ((match = reg.exec(str))) {
console.log(match[0]);
}
// 1.1
// 2
// 3
9.4 把向前查找和向后查找结合起来
回到之前的问题:把 Web 页面的标题提取出来。
const str = '<head><title>My homepage.</title></head>';
const reg = /(?<=<title>).*?(?=<\/title>)/;
console.log(reg.exec(str)[0]); // "My homepage."
9.5 对前后查找取非
- ?= 取非:?!
- ?<= 取非:?<!
找出不是代表价格的数字。
const str = 'I paid $35 for 10 apples, 5 oranges and 5 pears. I saved $1.';
const reg = /\b(?<!\$)\d+\b/g; // <-- 注意 \b ,如果不加,会匹配到 35 里的 5
let match;
while ((match = reg.exec(str))) {
console.log(match[0]);
}
// 10
// 5
// 5