JS正则表达式从入门到入土(7)—— 分组
2024-09-21 02:32:38
分组
在使用正则的时候,有时候会想要匹配一串字符串连续出现多次的情况,比如:我想匹配字符串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
类型格式字符串。
这个问题的难点在于,不仅要将-
转为/
还要将年月日的位置进行调换。由于年月日的数值是不固定的,没法直接转换为固定数值。这时,我们可以使用反向引用解决这个问题。
反向引用是分组中的一个重要的高级语法,主要用来解决分组变量的问题。
什么叫分组变量?分组变量就是通过分组匹配到的值,正则表达式将其转为了一种可以被调用的变量。而调用这个变量也很简单$n
n代表着分组的序号,值得一提的是,序号是从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)
最新文章
- 细说JAVA反射
- 安装完win8后,显卡一些其他的驱动没有被正常安装,此处出现问题的机器是索尼vpccw18fc
- CSS行高——line-height
- 将TP引擎改为smarty引擎
- hdu 4004 二分 2011大连赛区网络赛D
- Map在内存中的结构
- MVC 区分是哪按键提交FORM
- linux kernel 0.11 head
- html5+css3中的background: -moz-linear-gradient 用法
- UVA 10152-ShellSort(映射+栈)
- Android Studio不更新到最新版使用Kotlin
- pkuwc2018题解
- 查看python的OpenCV版本
- node学习之cookie和session
- 4712: 洪水 基于链分治的动态DP
- inner join 与一般笛卡尔积的区别
- PowerDesigner基础使用 ---- 入门学习
- django的csrf
- 启动HDFS时datanode无法启动的坑
- L1正则化和L2正则化
热门文章
- poj2396 Budget&;&;ZOJ1994 Budget[有源汇上下界可行流]
- ios 更改UITableview group形式 两个section之间的距离
- nginx排错error while loading shared libraries:libpcre.so.1:cannot open shared object file:No such file or directory
- SaltStack之编译安装LNMP环境
- ZOJ 3605 Find the Marble(dp)
- Morphia - mongodb之ORM框架
- input即时————模糊匹配(纯html+jquery简单实现)
- Apache Kafka源码分析 – Log Management
- Intellij idea中maven加载jar包很慢的解决方案.
- 前端开发 - HTML - 总结