In-depth understanding of the analysis of grouping of JS regular expressions

不言
Release: 2018-07-11 09:49:18
Original
1469 people have browsed it

这篇文章主要介绍了关于深入理解JS正则表达式之分组的解析,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

分组

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

有些人会直接写:

Byron{3}
Copy after login

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

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

(Byron){3}
Copy after login

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

Byron | Casper
Copy after login

即,Byron或Casper二选一。

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

let text = 'ByronsperByrCasper' let reg = /Byr(on|Ca)sper/g // 匹配Byronsper或ByrCasper text.replace(reg, 'X') // XX
Copy after login

反向引用

此时,我们有一个需求,将一种格式的时间字符串: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
Copy after login

忽略分组

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

(?:Byron).(ok)
Copy after login

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

深入理解JS正则表达式之贪婪模式与非贪婪模式的解析

深入理解JS正则表达式之量词的解析

The above is the detailed content of In-depth understanding of the analysis of grouping of JS regular expressions. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!