Javascript 正则扩展之dotAll模式

正则表达式中点 (.) 是一个特殊字符,它可以匹配除 换行符(\n)、回车符(\r)、行分隔符、段分隔符、四个字节的UTF-16字符外的任意字符。


为了使点(.)可以匹配任意字符,ES9 引入新的修饰符s(dotAll模式),就是让(.) 可以匹配一切字符。

代码一,ES9——dotAll模式之前采用\s 类匹配回车、换行等字符

let html = `
    <ul>
      <li>
        <a>C++编程思想</a>
        <span>张三</span>
      </li>
      <li>
        <a>Java Web开发</a>
        <span>李四</span>
      </li>
    </ul>`;
// 声明正则
 const reg = /<li>\s+<a>(.*?)<\/a>\s+<span>(.*?)<\/span>/g;
// 执行匹配
const result = reg[Symbol.match](html);
console.log(result);

输出结果

代码二,ES9——dotAll模式 (.)

下面这段代码采用了命名捕获分组+doAll模式

let html = `
    <ul>
      <li>
        <a>C++编程思想</a>
        <span>张三</span>
      </li>
      <li>
        <a>Java Web开发</a>
        <span>李四</span>
      </li>
    </ul>`;
//采用了命名捕获分组+doAll模式
const reg = /<li>.*?<a>(?<bookname>.*?)<\/a>.*?<span>(?<author>.*?)<\/span>/gs;
var result=null,bookList=[];
while ( result = reg.exec(html)) {
   let book= { bookname: result.groups.bookname, author: result.groups.author };
    bookList.push(book);
}
console.log(bookList);

输出结果

猜你喜欢

转载自blog.csdn.net/yue7603835/article/details/122253591