10. 正则表达式必知必会-嵌入条件
10.1 为什么要嵌入条件
// 123-246-7890 (123)456-7890 是合法的,找出合法的
const str = '123-246-7890 (123)456-7890 (123)-456-7890 (123-456-7890 1234567890 123 456 7890';
const reg = /\(?\d{3}\)?-?\d{3}-\d{4}/g;
let match;
while ((match = reg.exec(str))) {
console.log(match[0]);
}
// 123-246-7890
// (123)456-7890
// (123)-456-7890 <-- 不合法的找出来了
// (123-456-7890 <-- 不合法的找出来了
const reg = /\(?\d{3}[\)-]?\d{3}-\d{4}/g; // <-- 可以排除第三行, [\)-]? 表示 括号 和 - 只能出现一个
let match;
while ((match = reg.exec(str))) {
console.log(match[0]);
}
// 123-246-7890
// (123)456-7890
// (123-456-7890
如果左边是 (,就必须匹配 (123)456-7890这种模式,否则匹配 123-246-7890,所以需要条件处理。
10.2 正则表达式里的条件
正则表达式里的条件要用 ? 来定义。
条件嵌入两种情况:
- 根据一个回溯引用来进行条件处理
- 根据一个前后查找来进行条件处理
10.2.1 回溯引用条件
找出 img 标签,如果 img 标签包含在 a 标签中,还要把 a 标签找出来。
略...