详解JavaScript正则表达式之分组匹配及反向引用


Posted in Javascript onMarch 09, 2016

语法

元字符:(pattern)

作用:用于反复匹配的分组

属性$1~$9

如果它(们)存在,用于得到对应分组中匹配到的子串

\1或$1

用于匹配第一个分组中的内容

\2或$2

用于匹配第一个分组中的内容

...

\9或$9

用于匹配第一个分组中的内容

用法示例

var reg = /(A+)((B|C|D)+)(E+)/gi;//该正则表达式有4个分组
//对应关系
//RegExp.$1 <-> (A+)
//RegExp.$2 <-> ((B|C|D)+)
//RegExp.$3 <-> (B|C|D)
//RegExp.$4 <-> (E+)

以上的代码也同时给出了$1~$9的用法

$1~$9是正则表达式预定义的静态属性,通过RegExp.$1引用

分组嵌套关系说明

上述代码也可以说明分组的嵌套关系

//测试环境 Chrome浏览器
var str = "ABCDE";
var reg = /(A+)((B|C|D)+)(E+)/gi;
str.match(reg);//输出:["ABCDE"]
reg.exec(str,'i');//输出:["ABCDE", "A", "BCD", "D", "E"]
RegExp.$1;//输出:"A"
RegExp.$2;//输出:"BCD"
RegExp.$3;//输出:"D"
RegExp.$4;//输出:"E"

这样就可以很明白的看出分组的嵌套关系了

总结来说:大的分组中存在小的分组时,小的分组是排在该大分组后面的分组,以此类推

第二部分

这部分主要讲解类似于"\1"这个东西的用法

分组匹配之反向引用

语法

元字符 \1~\9

作用:用来表示前面以匹配的字符或分组的一个引用

用法示例

参考文章:[原]AS3 js正则表达式 反向引用(backreference)

上面说的可能有些拗口,下面给一个例子:

//一般情况,当我们想匹配任意两个相同的字符(复杂一点就是两个相同的分组)时,往往可以借助下面的写法
//说明:
//(\w)用来匹配任何除了换行和制表符的字符, 而\1是对(\w)的一个引用, 所以你可以理解成: (\w)\1 就是(\w)(\w)
//但是,
//(\w)\1 和 (\w)(\w)的不同之处在于, (\w)(\w)表示任意两个连续的字符, 比如Ac, MM, K9, 都可以,
// 但(\w)\1只能是AA, CC, 99 这样连续相同的字符
//所以, 你可以这样理解, \1 是对(\w)的一个实例化引用, 当(\w) 匹配到A时, \1 被表达成A, 当(\w)匹配9时, \1 被表示成9
//说了这么多, 可能有些废话, 下面这个例子就很好理解了
var str = "AA Am 99";
var reg = /(\w)\1/g;
str.match(reg);//输出: ["AA", "99"]

所以, 参照上边我所引用的文章中给出的 "关键字搜索高亮显示的正则表达用法" 的例子, 我给出自己改进的小的DEMO

虽然这个DEMO没有用到任何的关于反向引用的知识点::>_<::

//测试环境 Chrome浏览器
var key = "keywords";//搜索的关键字
var text = " I am a text, and I have a keywords before this";//待匹配的文本
var reg = new RegExp("("+key+")","g");
text.replace(reg,"<span style='color:red'>$1</span>");//输出: " I am a text, and I have a <span style='color:red'>keywords</span> before this"

下面给大家详细介绍下正则表达式之反向引用

 示例1:

public static void main(String[] args) { 
 String s="99-3933"; 
 boolean b=Pattern.matches("([\\d])\\1[-]([3])\\1\\2{2}", s); 
 System.out.println(b); 
}

反向引用,匹配重复的数字

([\d])====>\1

([3])====>\2

示例2:

public class test { 
 public static void main(String[] args) { 
  String s="99-393399-3933"; 
  boolean b=Pattern.matches("(([\\d])\\2[-]([3])\\2\\3{2})\\1", s); 
  System.out.println(b); 
 } 
}
Javascript 相关文章推荐
在线编辑器中换行与内容自动提取
Apr 24 Javascript
几个有趣的Javascript Hack
Jul 24 Javascript
js实现倒计时(距离结束还有)示例代码
Jul 24 Javascript
jquery 添加节点的几种方法介绍
Sep 04 Javascript
js charAt的使用示例
Feb 18 Javascript
jQuery遍历json中多个map的方法
Feb 12 Javascript
js实现遍历含有input的table实例
Dec 07 Javascript
Angular 作用域scope的具体使用
Dec 11 Javascript
JS中Object对象的原型概念基础
Jan 29 Javascript
vue实现前台列表数据过滤搜索、分页效果
May 28 Javascript
Vue实现购物车详情页面的方法
Aug 20 Javascript
vue实现两个组件之间数据共享和修改操作
Nov 12 Javascript
javascript html5移动端轻松实现文件上传
Mar 27 #Javascript
javascript事件绑定学习要点
Mar 09 #Javascript
js实现分割上传大文件
Mar 09 #Javascript
js实现ctrl+v粘贴上传图片(兼容chrome、firefox、ie11)
Mar 09 #Javascript
基于jQuery的网页影音播放器jPlayer的基本使用教程
Mar 08 #Javascript
利用jQuery设计一个简单的web音乐播放器的实例分享
Mar 08 #Javascript
Bootstrap~多级导航(级联导航)的实现效果【附代码】
Mar 08 #Javascript
You might like
php中看实例学正则表达式
2006/12/25 PHP
用php守护另一个php进程的例子
2015/02/13 PHP
php微信开发之自定义菜单完整流程
2016/10/08 PHP
CSS中简写属性要注意TRouBLe的顺序问题(避免踩坑)
2021/03/09 HTML / CSS
SyntaxHighlighter代码加色使用方法
2008/09/07 Javascript
javascript oop开发滑动(slide)菜单控件
2010/08/25 Javascript
JavaScript判断表单提交时哪个radio按钮被选中的方法
2015/03/21 Javascript
javascript中基本类型和引用类型的区别分析
2015/05/12 Javascript
JS如何判断是否为ie浏览器的方法(包括IE10、IE11在内)
2015/12/13 Javascript
javascript制作照片墙及制作过程中出现的问题
2016/04/04 Javascript
javascript实现平滑无缝滚动
2020/08/09 Javascript
JS中事件冒泡和事件捕获介绍
2016/12/13 Javascript
JavaScript中日常收集常见的10种错误(推荐)
2017/01/08 Javascript
Easyui Tree获取当前选择节点的所有顶级父节点
2017/02/14 Javascript
async/await地狱该如何避免详解
2018/05/10 Javascript
jQuery+CSS实现的标签页效果示例【测试可用】
2018/08/14 jQuery
详解webpack4之splitchunksPlugin代码包分拆
2018/12/04 Javascript
使用express来代理服务的方法
2019/06/21 Javascript
JavaScrip如果基于url实现图片下载
2020/07/03 Javascript
Python实现Windows上气泡提醒效果的方法
2015/06/03 Python
python flask中静态文件的管理方法
2018/03/20 Python
numpy基础教程之np.linalg
2019/02/12 Python
Django框架封装外部函数示例
2019/05/28 Python
Python循环实现n的全排列功能
2019/09/16 Python
TensorFlow打印输出tensor的值
2020/04/19 Python
python多线程实现同时执行两个while循环的操作
2020/05/02 Python
canvas实现圆绘制的示例代码
2019/09/11 HTML / CSS
美国一家专业的太阳镜网上零售商:Solstice太阳镜
2016/07/25 全球购物
校园达人秀策划书
2014/01/12 职场文书
校本教研工作方案
2014/01/14 职场文书
一年级语文教学反思
2014/02/13 职场文书
后勤主管岗位职责
2014/03/01 职场文书
简单通用的简历自我评价
2014/09/21 职场文书
初二英语教学反思
2016/02/15 职场文书
配置nginx 重定向到系统维护页面
2021/06/08 Servers
baselines示例程序train_cartpole.py的ImportError
2022/05/20 Python