十分钟掌握正则表达式!4_分组匹配_捕获形分组
javascript正则表达式
- 1、分组
- 1.1、候选:一个分组中,可以有多个候选表达式,用|分隔:
- 1.2、捕获与引用:
- 1.2.1 与replace配合:
- 1.2.2 给replace传迭代函数,有时能优雅地解决一些问题。
- 2、分组有四种类型:
- 2.1、捕获型 - ()
- 2.1.1、 反向引用_(基于分组)
- 2.1.2、 匹配页面元素
- 2.1.3 嵌套分组的捕获
- 3、其他类型分组
1、分组
var str4 = "qwertyu"
var str5 = "qwerbb"
console.log(str4.match(/[a-z]*/));// ["qwertyu"]
console.log(str4.match(/([a-z]*)/));// ["qwertyu", "qwertyu"]
console.log(str5.match(/([a-z]*)(bb)/));// ["qwerbb", "qwer", "bb"]
1.1、候选:一个分组中,可以有多个候选表达式,用|分隔:
var regfz = /I love (him|her|it)/;
console.log(regfz.test('I love him')); // true
console.log(regfz.test('I love her')); // true
console.log(regfz.test('I love it')); // true
console.log(regfz.test('I love them')); // false
console.log("----------------------");
1.2、捕获与引用:
//被正则表达式匹配(捕获)到的字符串会被暂存起来。
//其中,由分组捕获的串会从1开始编号,于是我们可以引用这些串:($1引用了第一个被捕获的串,$2是第二个,依次类推。)
var regbh = /(\d{4})-(\d{2})-(\d{2})/
var date = '2010-04-12'
regbh.test(date)
console.log(RegExp.$1);// 2010
console.log(RegExp.$2);// 04
console.log(RegExp.$3);// 12
1.2.1 与replace配合:
// String.prototype.replace方法的传参中可以直接引用被捕获的串。比如我们想将日期12.21/2012改为2012-12-21:
var regrep = /(\d{2}).(\d{2})\/(\d{4})/
var date1 = '12.21/2012'
date1 = date1.replace(regrep, '$3-$1-$2')
console.log(date1);// date = 2012-12-21
var naem = 'Xong xu, Chen'
naem = naem.replace(/(\w+\s*\w+)\s*,\s*(\w+)/, '$2,$1')
console.log(naem);//Chen,Xong xu
1.2.2 给replace传迭代函数,有时能优雅地解决一些问题。
// 将违禁词转换为等字数的星号是一个常见功能。比如文本是kid is a doubi,其中kid与doubi是违禁词,
// 那么转换后应该为*** is a *****。我们可以这么写:
var regdd = /(kid|doubi)/g
var strdd = 'kid is a doubi'
strdd = strdd.replace(regdd, function (word) {// word相当于正则匹配到的结果// console.log(word);//kid doubireturn word.replace(/./g, '*')
})
console.log(strdd);//*** is a *****
console.log("----------------------");
2、分组有四种类型:
2.1、捕获型 - ()
// 只有捕获型分组会暂存匹配到的串。
var csstr1 = 'ab=12,bc=23,def=45'
var csreg1 = /(\w+)=(\d+)/g
var result1 = null;
while (result1 = csreg1.exec(csstr1)) {console.log(result1);//["ab=12", "ab", "12", index: 0, input: "ab=12,bc=23,def=45", groups: undefined]//["bc=23", "bc", "23", index: 6, input: "ab=12,bc=23,def=45", groups: undefined]//["def=45", "def", "45", index: 12, input: "ab=12,bc=23,def=45", groups: undefined]
}
2.1.1、 反向引用_(基于分组)
// 正则表达式里也能进行引用,这称为反向引用:
var regfx = /(\w{3}) is \1/
regfx.test('kid is kid') // true
regfx.test('dik is kid') // false
// \1引用了第一个被分组所捕获的串,换言之,表达式是动态决定的。
2.1.2、 匹配页面元素
// 很多时候,会提取页面标签正则判断。页面标签有个特点,就是会有个相同的闭合标签。
var strfx1 = `"<html><h1>www.yehuozhili.cn</h1></html><html><h1>www.yehuozhili.cn</h1></html>"`
var regfx1 = /\<(\w+\>).*?\1/g
var regfx2 = /\<(\w*)\>.*?\<\/?\1\>/g
console.log(strfx1.match(regfx1));//["<html><h1>www.yehuozhili.cn</h1></html>", "<html><h1>www.yehuozhili.cn</h1></html>"]
console.log(strfx1.match(regfx2));//["<html><h1>www.yehuozhili.cn</h1></html>", "<html><h1>www.yehuozhili.cn</h1></html>"]// 匹配h1
var regfx3 = /\<(h1)\>.*?\<\/?\1\>/g // \/?——————指的是结束标签的/可有可无,如:</html>,<html>
console.log(strfx1.match(regfx3)); //["<h1>www.yehuozhili.cn</h1>", "<h1>www.yehuozhili.cn</h1>"]
console.log("----------------------");
2.1.3 嵌套分组的捕获
var zfstr = ' abc 234 abc abc'
console.log(zfstr.match(/(\s([a-z]+)\s)\d+\1\2/));// [" abc 234 abc abc", " abc ", "abc"]// 如果碰到类似/((kid) is (a (doubi)))/的嵌套分组,捕获的顺序是什么?来试试:
var regqt = /((kid) is (a (doubi)))/
var strqt = "kid is a doubi"regqt.test(strqt) // true
console.log(RegExp.$1); // kid is a doubi
console.log(RegExp.$2); // kid
console.log(RegExp.$3); // a doubi
console.log(RegExp.$4); // doubi
// 规则是以左括号出现的顺序进行捕获。
console.log("----------------------");
3、其他类型分组
2.2、非捕获型 - (?:)
2.3、正向前瞻型 - (?=)
2.4、反向前瞻型 - (?!)
我们之前说的都是捕获型分组,只有这种分组会暂存匹配到的串。其他分组将在下一章介绍
十分钟掌握正则表达式!4_分组匹配_捕获形分组相关推荐
- 分享一篇十分钟学会正则表达式教程
1.正则表达式 正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串.将匹配的子串做替换或者从某个串中取出符合某个条件的子串等. 模式:使用 ...
- java 正则匹配括号是否成对_十分钟学会正则表达式
正则表达式用处挺广的,主要用于处理字符串. 正则引擎 想要在计算机语言中使用正则表达式,那么这门计算机语言必须要利用正则引擎去实现相应的正则库.主要的正则引擎分为以下两类: DFA 确定性的状态机.不 ...
- JS正则表达式的分组匹配
原文地址: JS正则表达式的分组匹配 什么是分组 通俗来说,我理解的分组就是在正则表达式中用()包起来的内容代表了一个分组,像这样的: var reg = /(\d{2})/ reg.test('12 ...
- python网络爬虫的基本步骤-十分钟教会你用Python写网络爬虫程序
在互联网时代,爬虫绝对是一项非常有用的技能.借助它,你可以快速获取大量的数据并自动分析,或者帮你完成大量重复.费时的工作,分分钟成为掌控互联网的大师. 注意:欲获取本文所涉及的文案,代码及教学视频的链 ...
- 十分钟实现 Android Camera2 相机拍照
1. 前言 因为工作中要使用Android Camera2 API,但因为Camera2比较复杂,网上资料也比较乱,有一定入门门槛,所以花了几天时间系统研究了下,并在CSDN上记录了下,希望能帮助到更 ...
- mysql 正则匹配 捕获组_常用正则表达式 捕获组(分组)
1.img标签 //,空格后src以'或"开始..... Regex reg = new Regex("]*\\ssrc=(['\"]+[^<>'\" ...
- java 分组报表_【Java】分组报表怎么做,积木报表十分钟搞定!
首页 专栏 java 文章详情 0 分组报表怎么做,积木报表十分钟搞定! scott发布于 今天 12:24 报表需求 某大型超市需要做一张年度区域销售统计报表 展示2019和2020年度各地区每月的 ...
- linux pandas教程_十分钟入门 Pandas
# 十分钟入门 Pandas 本节是帮助 Pandas 新手快速上手的简介.烹饪指南里介绍了更多实用案例. 本节以下列方式导入 Pandas 与 NumPy: In [1]: import numpy ...
- python-正则表达式-单字符匹配_多字符匹配_匹配分组_命名分组
正则表达式 正则表达式定义和作用 正则表达式的定义: 是约束字符串匹配某种形式的规则 正则表达式的作用: 检测某个字符串是否符合规则 提取网页字符串中想要的数据 正则表达式所包含的元素种类 正则表达式 ...
最新文章
- 华为p30如何把计算机放进通知栏,华为p30短信来了在通知栏怎么不显示
- 我给学生做单车旅行的宣传讲座
- java Integer中隐藏的细节魔鬼!来自面试官的三轮暴击!
- MYSQL数据同步到ES7
- java设计模式--简单工厂设计模式SimpleFactoryPattern
- obs可以推到中转服务器吗,能否使用OBS(Open Broadcaster Software)、FMLE(Flash Media Live Encoder)等第三方软件进行推流?...
- 台式计算机装系统,教你台式电脑重装系统方法
- 中年发福谁之“过”?Science论文采用“双标水”法首次揭示全生命周期代谢规律...
- 学会判断Web安全网关的性能
- 1-关于单片机通信数据传输(中断发送,大小端,IEEE754浮点型格式,共用体,空闲中断,环形队列)...
- 基于HT for Web矢量实现3D叶轮旋转
- HDCP版权保护机制
- linux c 读取.bin文件
- Maya模型制作与场景建模
- 打造双网卡负载均衡服务器(转)
- ffmpeg-python库的使用翻译(三)
- 简单搭建微服务springCloudNetflix服务(一)
- 云钻还在吗 苏宁怎么解除实名认证_实名认证-苏宁如何修改实名认证我想修改实名认证信?苏 – 手机爱问...
- 弹性计算双周刊 第20期
- css绘制八方向云台 环形按钮盘
热门文章
- Cannot find JRE '1.8'. You can specify JRE to run maven goals in Settings
- Linux下块驱动(总结)和源码解析
- 2005年春, 北京自助游第一站——潭柘寺
- 全国青少年电子信息智能创新大赛(复赛)python·模拟一卷
- 【字符是json格式】 如何拿取里面的id?
- ftp修改服务器配置,ftp服务器的简单配置
- 使用DivX / Xvid和AutoGK压缩大型视频文件
- 阿里巴巴脱贫基金半年报发布:800余贫困县半年电商销售超260亿
- 【SICP练习】139 练习3.70
- 自制贪吃蛇——主场景