分组

在使用正则的时候,有时候会想要匹配一串字符串连续出现多次的情况,比如:我想匹配字符串Byron连续出现3次的情况。

有些人会直接写:

Byron{3}

但是,这种情况仅仅会匹配Byro加上三个n,显然,这样是错误的。

要想实现之前的需求,我们需要使用正则表达式的分组功能:使用()可以达到分组的功能,使量词作用于分组。所以,如下正则可以顺利匹配Byron三次

(Byron){3}

JS中的|的含义是或,在正则中,我们也可以使用|达成或的效果。比较常用的或的写法是:

Byron | Casper

即,Byron或Casper二选一。

还有一种用法是配合分组使用:

let text = 'ByronsperByrCasper'

let reg = /Byr(on|Ca)sper/g		// 匹配Byronsper或ByrCasper

text.replace(reg, 'X')		// XX

反向引用

此时,我们有一个需求,将一种格式的时间字符串:yyyy-MM-DD转为MM/DD/yyyy类型格式字符串。

这个问题的难点在于,不仅要将-转为/还要将年月日的位置进行调换。由于年月日的数值是不固定的,没法直接转换为固定数值。这时,我们可以使用反向引用解决这个问题。

反向引用是分组中的一个重要的高级语法,主要用来解决分组变量的问题。

什么叫分组变量?分组变量就是通过分组匹配到的值,正则表达式将其转为了一种可以被调用的变量。而调用这个变量也很简单$nn代表着分组的序号,值得一提的是,序号是从1开始,而不是从0开始。

通过反向引用可以很轻松的解决上面那个问题:

let text = '2018-07-09'

let reg = /(\d{4})-(\d{2})-(\d{2})/g

/*
$1是(\d{4})的匹配内容,代表yyyy
$2是第一个(\d{2})的匹配内容,代表MM
$3是第二个(\d{2})的匹配匹配内容,代表DD
*/
text.replace(reg, '$2/$3/$1') // 07/09/8

忽略分组

当不希望捕获某些分组,只需要在分组内加上?:即可以

(?:Byron).(ok)

JS正则表达式从入门到入土(7)—— 分组的更多相关文章

  1. JS正则表达式从入门到入土(10)—— 字符串对象方法

    字符串对象方法 search方法 String.prototype.search(reg) search方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,方法返回第一个匹配结果的 ...

  2. JS正则表达式从入门到入土(9)—— test方法以及它的那些坑

    test方法 test方法介绍 RegExp.prototype.test(str) test方法用于测试字符串参数中是否存在匹配正则表达式模式的字符串 test方法的使用 let reg = /\w ...

  3. JS正则表达式从入门到入土(8)—— REGEXP对象属性

    对象属性 常用对象属性主要有以下几种: 1.global: 是否全文搜索,默认false 2.ignore case:是否大小写敏感,默认是false 3.multiline:多行搜索,默认值是fal ...

  4. JS正则表达式从入门到入土(6)—— 贪婪模式与非贪婪模式

    贪婪模式 之前说了正则的量词,但是量词会带来一个到底该匹配哪个的问题. 如下正则表达式: \d{3,6} 这个正则表达式是匹配3到6个数字,但是当这个正则表达式被用来匹配12345678这个字符串,到 ...

  5. JS正则表达式从入门到入土(4)—— 预定义类与边界

    预定义类 正则表达式提供预定义类来匹配常见的字符类 字符 等价类 含义 . [^\r\n] 除了回车符和换行符以外的所有字符 \d [0-9] 数字字符 \D [^0-9] 非数字字符 \s [\t\ ...

  6. JS正则表达式从入门到入土(3)—— 范围类

    范围类 在使用正则表达式时,很多时候,我们会想要匹配a~z的所有字母,很多人想到,可以使用字符类[abcdefg...z],但是,这种方法需要输入所有需要匹配的字母.那么,有没有简单点的方法呢? 所幸 ...

  7. JS正则表达式从入门到入土(2)—— 元字符和字符类

    元字符和字符类 元字符 正则表达式由两种基本字符类型组成: 1.原义(正常)文本字符:代表本身含义的字符,如:a.b.c.1.2.3等. 2.元字符:元字符是在正则表达式中有特殊含义的非字母字符,如\ ...

  8. JS正则表达式从入门到入土(1)—— REGEXP对象

    REGEXP对象 JavaScript通过内置对象RegExp支持正则表达式,有两种方法实例化RegExp对象. 1.字面量 2.构造函数 字面量 字面量是直接通过/.../创建RegExp对象实例. ...

  9. JS正则表达式从入门到入土(5)—— 量词

    量词 很多时候,我们需要匹配一个连续出现很多次字符的字符串,比如,我们要匹配一个连续出现20次的数字的字符串,按照之前的写法: \d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d ...

随机推荐

  1. JS-表单提交检查表单字数方法

    解决方法: //作用于整个html中 function check(form) { //topic是input的id,descrip是textarea的id var topic = $("# ...

  2. 【BZOJ2905】背单词 fail树+DFS序+线段树

    [BZOJ2905]背单词 Description 给定一张包含N个单词的表,每个单词有个价值W.要求从中选出一个子序列使得其中的每个单词是后一个单词的子串,最大化子序列中W的和. Input 第一行 ...

  3. How to install sharepoint server 2010 sp2 in window 7 x64

    1. 下载 sharepoint server 2010 sp2 x64 2. 下载 前置环境插件 Microsoft FilterPack 2.0  (CD "C:\Program Fil ...

  4. python--excel

    import xlrd, xlwt # 读取Exceldef read_excel(excel_name, sheet_name): if excel_name and excel_name: all ...

  5. [iOS微博项目 - 4.2] - 设置转发微博背景

    github: https://github.com/hellovoidworld/HVWWeibo A.转发微博部分的淡灰色背景 1.需求 转发微博部分需要设置背景色 使用图片作为背景   2.思路 ...

  6. Spark源码分析 – Executor

    ExecutorBackend 很简单的接口 package org.apache.spark.executor /** * A pluggable interface used by the Exe ...

  7. datasnap rest Windows客户端编写

    首先吐槽一下XE关于datasnap的资料真的是太少了... 服务端用DSHTTPService1控件可以实现http接口方式的调用,返回的都是json格式数据,适用于跨平台解析. 这里着重强调一下d ...

  8. windows系统的对象管理

    windows中的对象和高级编程语言中所说的对象还欧区别,准确来讲,windows中的对象其实指的是一种数据结构并且是一种带着“对象头(object head)” 的数据结构!  所以windows中 ...

  9. 【我的Android进阶之旅】Android 如何防止 so库文件被未知应用盗用?

    首先,关于Android 如何防止 so库文件被未知应用盗用这个话题并不是我擅长的,只是在开发中遇到了这个问题,因此在这里总结一下. 故事回到几个月之前,当时公司和第三方音乐平台合作了一款内置于手表系 ...

  10. ansible(2)

    一.ansible模块(yum.pip.service.conr.user.group) 上篇中我们已经学了ansible的几个模块,接下来再来学习几个,那么你是否知道ansible一共有多少模块呢? ...