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 标签找出来。

略...

Last Updated: 8/6/2019, 7:45:20 PM