Javascript 正则扩展之dotAll模式

Posted UsherYue

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);

输出结果

 

以上是关于Javascript 正则扩展之dotAll模式的主要内容,如果未能解决你的问题,请参考以下文章

Javascript 正则扩展之dotAll模式

ES2018 新特征之:正则表达式 dotAll 模式

正则表达式之Dotall模式

JavaScript dotAll模式

ES9(2018)RegExp扩展

Python: 正则表达式匹配多行,实现多行匹配模式