详解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 相关文章推荐
JavaScript 事件参考手册
Dec 24 Javascript
js数组的操作详解
Mar 27 Javascript
自动刷新网页,自动刷新当前页面,JS调用
Jun 24 Javascript
javascript中match函数的用法小结
Feb 08 Javascript
JavaScript数字和字符串转换示例
Mar 26 Javascript
JavaScript中读取和保存文件实例
May 08 Javascript
JavaScript判断浏览器类型的方法
Feb 10 Javascript
jQuery实现点击小图显示大图代码分享
Aug 25 Javascript
Bootstrap基本布局实现方法详解
Nov 25 Javascript
微信小程序使用input组件实现密码框功能【附源码下载】
Dec 11 Javascript
你点的 ES6一些小技巧,请查收
Apr 25 Javascript
layui radio点击事件实现input显示和隐藏的例子
Sep 02 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计算当前程序执行时间示例
2014/04/24 PHP
PHP如何将XML转成数组
2016/04/04 PHP
php中10个不同等级压缩优化图片操作示例
2016/11/14 PHP
JavaScript 常用函数库详解
2009/10/21 Javascript
jquery插件之easing使用
2010/08/19 Javascript
jQuery获取动态生成的元素示例
2014/06/15 Javascript
jQuery中offset()方法用法实例
2015/01/16 Javascript
JS实现Select的option上下移动的方法
2016/03/01 Javascript
用JavaScript动态建立或增加CSS样式表的实现方法
2016/05/20 Javascript
vue实现全选和反选功能
2017/08/31 Javascript
基于substring()和substr()的使用以及区别(实例讲解)
2017/12/28 Javascript
如何优雅地取消 JavaScript 异步任务
2020/03/22 Javascript
vue+vuex+axios从后台获取数据存入vuex,组件之间共享数据操作
2020/07/31 Javascript
python通过索引遍历列表的方法
2015/05/04 Python
python使用Tesseract库识别验证
2018/03/21 Python
python3下实现搜狗AI API的代码示例
2018/04/10 Python
python网络编程 使用UDP、TCP协议收发信息详解
2019/08/29 Python
Python导入数值型Excel数据并生成矩阵操作
2020/06/09 Python
Django ModelForm组件原理及用法详解
2020/10/12 Python
Black Halo官方网站:购买连衣裙、礼服和连体裤
2018/06/13 全球购物
荷兰在线体育用品商店:Avantisport.nl
2018/07/04 全球购物
英国100%防污和防水的靴子:Muck Boot Company
2020/09/08 全球购物
Java如何调用外部Exe程序
2015/07/04 面试题
网络工程师的自我评价
2013/10/02 职场文书
工程部主管岗位职责
2013/11/17 职场文书
晚宴邀请函范文
2014/01/15 职场文书
企业安全生产承诺书
2014/05/22 职场文书
品牌推广活动策划方案
2014/08/19 职场文书
党员自我剖析材料
2014/08/31 职场文书
公司离职证明样本
2014/09/13 职场文书
2014年企业党支部工作总结
2014/12/04 职场文书
企业安全生产检查制度
2015/08/06 职场文书
关于职业道德的心得体会
2016/01/18 职场文书
《女娲补天》教学反思
2016/02/20 职场文书
JavaScript 中for/of,for/in 的详细介绍
2021/11/17 Javascript
简单聊聊TypeScript只读修饰符
2022/04/06 Javascript