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

  • 复杂的字符串搜寻、替换工作,无法用简单的方式(类似借助标准库函数)达成。
  • 能够帮助你进行各种字符串验证。
  • 不止应用于编程语言中: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个子表达式,以此类推,\0对应整个正则表达式。

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

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

 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. Hubbinsstr = str.replace(/[^a-zA-Z]/g, '-').replace(/\B[A-Z]\B/g, '-$&');return str.toLowerCase();
}

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

结束语

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

转载于:https://www.cnblogs.com/kasmine/p/6420135.html

正则表达式 之 回溯引用:前后一致匹配相关推荐

  1. 回溯引用:前后一致匹配

    1.查询一个字符串的重复 回溯引用指的是模式的后半部分引用在前半部分中定义的子表达式. 可以把回溯引用想象成变量. 回溯引用只能用来引用模式里的子表达式,用(和)括起来的正则表达式片段 This is ...

  2. python正则表达式,向前向后查找与回溯引用

    向前向后查找 import rekey = r'<html><body><h1>hello world<h1></body></htm ...

  3. 正则表达式之反向引用

    1.概述 捕获组捕获到的内容,不仅可以在正则表达式外部通过程序进行引用,也可以在正则表达式内部进行引用,这种引用方式就是反向引用.要了解反向引用,首先要了解捕获组,关于捕获组,参考 正则基础之--捕获 ...

  4. 选择、分组、引用,指定匹配的位置

    正则表达式的语法还包括指定选择项,对子表达式分组和引用前一子表达式的特殊字符.字符| 用于分隔供选择的字符.例如: /ab|cd|ef/ 匹配的是字符串 "ab",或者是字符串 & ...

  5. php正则引用不能计算,php正则表达式 后向引用~

    php正则表达式 后向引用- 使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理.默认情况下,每个分组会自动拥有一个组号,规则是:从左 ...

  6. php 正则表达式 后向引用,php正则表达式 后向引用~ | 学步园

    php正则表达式 后向引用- 使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理.默认情况下,每个分组会自动拥有一个组号,规则是:从左 ...

  7. php正则表达式后向引用和贪婪模式

    后向引用 示例代码 //正则表达式 //后向引用 $str='<br>shen</br>'; $pattern='/<br>(.*)<\/br>/'; ...

  8. 正则表达式中,如何在任意匹配字符后面加上原字符和特定内容

    正则表达式中,如何在任意匹配字符后面加上原字符和特定内容 数据的中间,时间格式上没有秒, 10.7.98.204,10.4.177.5,wb_gh017,2018/7/1 23:58,00-71-C2 ...

  9. 正则表达式的贪婪和非贪婪匹配

    贪婪匹配:正则表达式一般趋向于最大长度匹配. 非贪婪匹配:匹配到结果就好. 默认是贪婪模式.在量词后面直接加一个问号?就是非贪婪模式. 量词:{m.n}:m到n个 *:任意多个(表示匹配0-无穷) + ...

最新文章

  1. 设置最大值_电机变频器参数设置不当会怎样
  2. qt udp多线程收发过程_! udp多线程的有关问题
  3. 二十、Pyecharts数据可视化
  4. Ubuntu 用户安装 MATE
  5. 动态规划--凸多边形最优三角剖分
  6. mysql 调用未定义函数_php – Wierd和Annoying错误:调用未定义的函数mysql_query()[复制]...
  7. css入门之head区设置
  8. 浅谈MaxCompute资源规划管理及评估
  9. c语言2048项目报告,c语言----项目_小游戏2048
  10. iphone中结束电话后返回自己的应用
  11. 盘点国内高投资低票房的电影巨制
  12. 51Nod-1050 循环数组最大段和【最大子段和+最小子段和+DP】
  13. sqlserver Split 开放写法有兴趣的学习一下
  14. ID3 决策树(基于西瓜数据集2.0)
  15. 【Python爬虫】获取全国客运列车车次及起讫站点位置信息
  16. 怎么彻底删除users下的文件夹_c盘用户文件夹特别大,c盘users文件夹可以删除吗...
  17. python subprocess.Popen 监控控制台输出
  18. 免费wechat机器人教程
  19. 如何使用Flutter封装即时通讯IM框架开发插件
  20. 一文带你了解ARM的发展历程

热门文章

  1. 若想活得洒脱,就要学会看开
  2. 根据应用场景人工智能技术有哪些分类?
  3. C++基础知识:C++语言中的表达式求值
  4. Picasso源码阅读笔记六
  5. Sandcastle Help File Builder(.NET帮助文档工具)的版本选择心得——支持VS2010至VS2015,高版本项目文件问题...
  6. 【数字全排列】LeetCode 31. Next Permutation
  7. 【深度学习】深度学习的四大组件
  8. 由A* = A^T推导问题
  9. Tensorflow 实战 Google 深度学习框架(第2版)---- 10.2.2节 P274 代码
  10. oc21--super