正则

作者: 易路先登 | 来源:发表于2021-09-24 16:59 被阅读0次

    是什么
    模式
    如何生成正则表达式
    1、字面量

    let reg = /a/g
    

    2、new关键字

    new RegExp('模式','修饰符')
    

    正则实例api
    1、test

    let str = 'a1901'
    let reg = /^a/
    reg.test(str)
    

    2、exec

    var reg = /a/g
    var str = 'a1901a'
    reg.exec(str)//['a',0]
    reg.exec(str)//['a',5]
    reg.exec(str)//null
    

    字符串的正则方法
    1、match

    var reg = /a/g
    var str = 'a1901a'
    str.match(reg)//['a','a']
    

    2、replace

    var reg = /a/g
    var str = 'a1901a'
    str.replace(/a/g,(arg)=>{if(i++===0){return '优秀'}else{return 'A'};})
    

    描述字符

    元字符 描述
    . 查找单个字符,除了换行和行结束符
    \w 查找单词字符
    \W 查找非单词字符
    \d 查找数字
    \D 查找非数字字符
    \s 查找空白字符
    \S 查找非空白字符
    \b 匹配单词边界
    \B 匹配非单词边界
    \0 查找 NUL字符
    \n 查找换行符
    \f 查找换页符
    \r 查找回车符
    \t 查找制表符
    \v 查找垂直制表符
    \xxx 查找以八进制数 xxxx 规定的字符
    \xdd 查找以十六进制数 dd 规定的字符
    \uxxxx 查找以十六进制 xxxx规定的 Unicode 字符
    * 0~+∞
    0或1
    + 1~+∞
    {start,end} start~end
    转义

    贪婪模式:正则默认尽可能多的去匹配符合模式的字符
    非贪婪模式(模式?),正则尽可能少的去匹配符合模式的字符

    分组:每个分组都有一个x和其对应,在正则匹配后可以通过x直接获取

    global.name = 'zhangsan';
    global.age = 18
    var str = '{{name}}:{{age}}'
    str = str.replace(/\{\{(.*?)\}\}/g,(arg,$1)=>{
        console.log(arg,$1)
        return global[$1]
    })
    console.log(str)
    

    几种特殊的匹配

    特殊的匹配方式
    案例
    const str = `<h1 id="欢迎使用-wipi-markdown-编辑器">欢迎使用 Wipi Markdown 编辑器</h3>
    <blockquote>
      <ul>
      <li>整理知识,学习笔记</li>
      <li>发布日记,杂文,所见所想</li>
      <li>撰写发布技术文稿(代码支持)</li>
      </ul>
    </blockquote>
    <h2 id="什么是-markdown">什么是 Markdown</h2>
    <p>Markdown 是一种方便记忆、书写的纯文本标记语言,用户可以使用这些标记符号以最小的输入代价生成极富表现力的文档:譬如您正在阅读的这份文档。它使用简单的符号标记不同的标题,分割不同的段落,<strong>粗体</strong> 或者 <em>斜体</em> 某些文字。</p>
    <h3 id="1-待办事宜-todo-列表">1. 待办事宜 Todo 列表</h3>
    <ul>
    <li class="task-list-item" style="list-style-type: none;"><input type="checkbox" disabled style="margin: 0px 0.35em 0.25em -1.6em; vertical-align: middle;"> 支持以 PDF 格式导出文稿</li>
    <li class="task-list-item" style="list-style-type: none;"><input type="checkbox" disabled style="margin: 0px 0.35em 0.25em -1.6em; vertical-align: middle;" checked> 新增 Todo 列表功能</li>
    </ul>
    <h3 id="2-高亮一段代码code">2. 高亮一段代码[^code]</h3>
    <pre><code class="python language-python">@requires_authorization
    class SomeClass:
        pass
    
    if __name__ == '__main__':
        # A comment
        print 'hello world'
    </code></pre>
    <h3 id="3-绘制表格">3. 绘制表格</h3>
    <table>
    <thead>
    <tr>
    <th>项目</th>
    <th style="text-align:right;">价格</th>
    <th style="text-align:center;">数量</th>
    </tr>
    </thead>
    <tbody>
    <tr>
    <td>计算机</td>
    <td style="text-align:right;">1600</td>
    <td style="text-align:center;">5</td>
    </tr>
    <tr>
    <td>手机</td>
    <td style="text-align:right;">12</td>
    <td style="text-align:center;">12</td>
    </tr>
    <tr>
    <td>管线</td>
    <td style="text-align:right;">10</td>
    <td style="text-align:center;">234</td>
    </tr>
    </tbody>
    </table>
    <h3 id="4-嵌入网址">4. 嵌入网址</h3>
    <iframe src="//player.bilibili.com/player.html?aid=77737877&bvid=BV1xJ411z7eS&cid=132993821&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>
    <pre><code class="HTML language-HTML">&lt;iframe src="//player.bilibili.com/player.html?aid=77737877&amp;bvid=BV1xJ411z7eS&amp;cid=132993821&amp;page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"&gt; &lt;/iframe&gt;
    </code></pre>`;
    
    
    var reg  = /\<h([1-6])(.*?)\<\/h\1\>/g
    console.log(str.match(reg))
    

    模式内引用分组/\<h([1-6])(.*?)\<\/h\1\>/g 重点\number

    相关文章

      网友评论

          本文标题:正则

          本文链接:https://www.haomeiwen.com/subject/lpuzgltx.html