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. 分享一篇十分钟学会正则表达式教程

    1.正则表达式 正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串.将匹配的子串做替换或者从某个串中取出符合某个条件的子串等. 模式:使用 ...

  2. java 正则匹配括号是否成对_十分钟学会正则表达式

    正则表达式用处挺广的,主要用于处理字符串. 正则引擎 想要在计算机语言中使用正则表达式,那么这门计算机语言必须要利用正则引擎去实现相应的正则库.主要的正则引擎分为以下两类: DFA 确定性的状态机.不 ...

  3. JS正则表达式的分组匹配

    原文地址: JS正则表达式的分组匹配 什么是分组 通俗来说,我理解的分组就是在正则表达式中用()包起来的内容代表了一个分组,像这样的: var reg = /(\d{2})/ reg.test('12 ...

  4. python网络爬虫的基本步骤-十分钟教会你用Python写网络爬虫程序

    在互联网时代,爬虫绝对是一项非常有用的技能.借助它,你可以快速获取大量的数据并自动分析,或者帮你完成大量重复.费时的工作,分分钟成为掌控互联网的大师. 注意:欲获取本文所涉及的文案,代码及教学视频的链 ...

  5. 十分钟实现 Android Camera2 相机拍照

    1. 前言 因为工作中要使用Android Camera2 API,但因为Camera2比较复杂,网上资料也比较乱,有一定入门门槛,所以花了几天时间系统研究了下,并在CSDN上记录了下,希望能帮助到更 ...

  6. mysql 正则匹配 捕获组_常用正则表达式 捕获组(分组)

    1.img标签 //,空格后src以'或"开始..... Regex reg = new Regex("]*\\ssrc=(['\"]+[^<>'\" ...

  7. java 分组报表_【Java】分组报表怎么做,积木报表十分钟搞定!

    首页 专栏 java 文章详情 0 分组报表怎么做,积木报表十分钟搞定! scott发布于 今天 12:24 报表需求 某大型超市需要做一张年度区域销售统计报表 展示2019和2020年度各地区每月的 ...

  8. linux pandas教程_十分钟入门 Pandas

    # 十分钟入门 Pandas 本节是帮助 Pandas 新手快速上手的简介.烹饪指南里介绍了更多实用案例. 本节以下列方式导入 Pandas 与 NumPy: In [1]: import numpy ...

  9. python-正则表达式-单字符匹配_多字符匹配_匹配分组_命名分组

    正则表达式 正则表达式定义和作用 正则表达式的定义: 是约束字符串匹配某种形式的规则 正则表达式的作用: 检测某个字符串是否符合规则 提取网页字符串中想要的数据 正则表达式所包含的元素种类 正则表达式 ...

最新文章

  1. 华为p30如何把计算机放进通知栏,华为p30短信来了在通知栏怎么不显示
  2. 我给学生做单车旅行的宣传讲座
  3. java Integer中隐藏的细节魔鬼!来自面试官的三轮暴击!
  4. MYSQL数据同步到ES7
  5. java设计模式--简单工厂设计模式SimpleFactoryPattern
  6. obs可以推到中转服务器吗,能否使用OBS(Open Broadcaster Software)、FMLE(Flash Media Live Encoder)等第三方软件进行推流?...
  7. 台式计算机装系统,教你台式电脑重装系统方法
  8. 中年发福谁之“过”?Science论文采用“双标水”法首次揭示全生命周期代谢规律...
  9. 学会判断Web安全网关的性能
  10. 1-关于单片机通信数据传输(中断发送,大小端,IEEE754浮点型格式,共用体,空闲中断,环形队列)...
  11. 基于HT for Web矢量实现3D叶轮旋转
  12. HDCP版权保护机制
  13. linux c 读取.bin文件
  14. Maya模型制作与场景建模
  15. 打造双网卡负载均衡服务器(转)
  16. ffmpeg-python库的使用翻译(三)
  17. 简单搭建微服务springCloudNetflix服务(一)
  18. 云钻还在吗 苏宁怎么解除实名认证_实名认证-苏宁如何修改实名认证我想修改实名认证信?苏 – 手机爱问...
  19. 弹性计算双周刊 第20期
  20. css绘制八方向云台 环形按钮盘

热门文章

  1. Cannot find JRE '1.8'. You can specify JRE to run maven goals in Settings
  2. Linux下块驱动(总结)和源码解析
  3. 2005年春, 北京自助游第一站——潭柘寺
  4. 全国青少年电子信息智能创新大赛(复赛)python·模拟一卷
  5. 【字符是json格式】 如何拿取里面的id?
  6. ftp修改服务器配置,ftp服务器的简单配置
  7. 使用DivX / Xvid和AutoGK压缩大型视频文件
  8. 阿里巴巴脱贫基金半年报发布:800余贫困县半年电商销售超260亿
  9. 【SICP练习】139 练习3.70
  10. 自制贪吃蛇——主场景