分组

在使用正则的时候,有时候会想要匹配一串字符串连续出现多次的情况,比如:我想匹配字符串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. ArcGIS中的 .tpk数据

    转:http://blog.csdn.net/mytudousi/article/details/33347249 什么是tpk文件 tpk是ArcGIS10.1推出的一种新的数据文件类型,主要是用于 ...

  2. mysql用sql创建表完整实例

    create table user_login_latest( id int(11) unsigned NOT NULL AUTO_INCREMENT, user_id int(11) not nul ...

  3. Docker的基本使用(部署python项目)

    今天开始利用docker来部署项目,当然,首先,需要安装好Docker,这个在我的上篇中写了 一.准备项目 我写的是一个爬取某ppt网站的代码,就一个ppt1.py是爬虫,然后,ppts是存放下载的p ...

  4. JAVA基础之multipart,urlencoded以及JSON

    一.(enctype) 表单的默认编码方式  ajpplication/x-www-form-urlencoded 上传文件的编码方式  multipart/form-data 互联网应用常用编码   ...

  5. HDU 5875 Function 大连网络赛 线段树

    Function Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total ...

  6. Ubuntu 只能用guest登录的问题修复

    方式1(推荐): 1.先进入guest登入 2.通过Ctrl+Alt+F1进入命令行窗口(注释:Ctrl+Alt+F1~F6进入终端命令行,Ctrl+Alt+F7是退出终端) 3.登录root,然后进 ...

  7. How an event flows in a pipeline Netty Internal I/O Threads (Transport Implementation)

    C:\Users\sas\.m2\repository\io\netty\netty-all\4.1.30.Final\netty-all-4.1.30.Final-sources.jar!\io\n ...

  8. mysql备份总结

    w汇总对比. mysqldump -u user -p wdbname > /www/wbak.sql pwd CREATE TABLE wbak_w_02071349 LIKE w; INSE ...

  9. Nagle's Algorithm and TCP_NODELAY

    w非全尺寸分组的发送条件 HTTP The Definitive Guide TCP has a data stream interface that permits applications to ...

  10. 剑指Offer——整数中1出现的次数(从1到n整数中1出现的次数)

    题目描述: 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了 ...