zoukankan      html  css  js  c++  java
  • 正则表达式 之 回溯引用:前后一致匹配

     前言  正则表达式的用途很多,特别是在查找替换,文本处理,爬虫项目中应用更是很多:

    • 复杂的字符串搜寻、替换工作,无法用简单的方式(类似借助标准库函数)达成。
    • 能够帮助你进行各种字符串验证。
    • 不止应用于编程语言中:JavaScript、JAVA、Perl、PHP、C#...
    • 也应用于许多操作系统的主流指令中:Linux/Unix、Mac、Windows PowerScript

    由于正则表达式的流派很多,且关于JavaScript中的正则表达式的具体使用可以参照 MDN参考手册 或者这篇 博文 《玩转JavaScript正则表达式,而我此篇文章讲述的主要关于 回溯引用,主要是参考 《正则表达式必知必会》一书。

    介绍

         先说点基本语法,正则表达式的创建方式如下两种,直接使用对象字面量(推荐)或者使用RegExp构造函数创建:

    var pattern1 = /aabb/;
    var pattern2 = new RegExp('aabb');

    我们来看一个情形,在一篇HTML文档中,我们要匹配所有 标题标签(<h1>-<h6>以及其结束标签)

    var sentence=`<h1><wbr>正则表达式</h1>
            Content is divided into two sections;
            <h2>subTitle</h2>
            another line`
    var re = /<[hH][1-6]>.*?</[hH][1-6]>/g;
    console.log(sentence.match(re));

    我们使用如上正则表达式,看起来似乎是对的,但是我们来看看这个例子

    var sentence =`<h1><wbr>正则表达式</h1>
          Content is divided into two sections;
          <h2>subTitle</h3>
          another line`

    这样子并不合法,所以我们要做的便是利用回溯引用来解决这个问题

    回溯引用匹配 · 基本知识点

        1.(x) 匹配 'x' 并且记住匹配项。括号被称为 捕获括号

        2. 回溯引用只能引用子表达式(即捕获括号()括起的正则表达式片段)

        3.     用于标识回溯引用, 1 对应第1个子表达式,2 对应第2个子表达式,以此类推,对应整个正则表达式。

    (但是在替换操作中,必须使用$代替)

      看了这些知识点,还是来点例子,容易记一些~

     1.我们继续看看上面那个例子,如果换成下面的正在表达式

    var re = /<[hH]([1-6])>.*?</[hH]1>/g;

    这一次总算是正确了

    3. 再看freecodeCamp上的一道题,原题链接 :here

    Convert a string to spinal case. Spinal case is all-lowercase-words-joined-by-dashes.

    比如: spinalCase("AllThe-small Things") should return "all-the-small-things" 

    function spinalCase(str) {
      // "It's such a fine line between stupid, and clever."
      // --David St. Hubbins
      str = str.replace(/[^a-zA-Z]/g, '-')
        .replace(/B[A-Z]B/g, '-$&');
      return str.toLowerCase();
    }

    在这里,使用了回溯引用替换,$& 代表匹配的字符串

    结束语

      稍微总结了一些关于回溯引用的使用,关于正则表达式的内容还有很多,如果有什么错误的地方,希望大家可以不吝赐教,谢谢,祝大家开开心心~

  • 相关阅读:
    axis2依赖的其他jar, 版本不是最新的
    mysql: 安装后的目录结构
    视图的使用
    索引
    递归查询 start with connect by prior
    oracle创建表
    C#中 ??、 ?、 ?: 、?.、?[ ] 和$
    C#关键字static、virtual和abstract笔记
    js调用后台,后台调用前台等方法总结
    java基础序列化
  • 原文地址:https://www.cnblogs.com/kasmine/p/6420135.html
Copyright © 2011-2022 走看看