>웹 프론트엔드 >JS 튜토리얼 >JS 정규식 그룹화 분석에 대한 심층적인 이해

JS 정규식 그룹화 분석에 대한 심층적인 이해

不言
不言원래의
2018-07-11 09:49:181582검색

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

分组

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

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

 相关推荐:

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

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

위 내용은 JS 정규식 그룹화 분석에 대한 심층적인 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.