• JS正则表达式从入门到入土(7)—— 分组


    分组

    在使用正则的时候,有时候会想要匹配一串字符串连续出现多次的情况,比如:我想匹配字符串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)
    
  • 相关阅读:
    TCP的初始cwnd和ssthresh
    C/C++ main
    PHP Function
    run bin
    PHP
    LAMP
    PHP MATH
    PHP array sort
    inline
    gcc g++
  • 原文地址:https://www.cnblogs.com/karthuslorin/p/9281880.html
Copyright © 2020-2023  润新知