正则表达式-分组

1.分组

如果想要用正则匹配身份证,要怎么写正则表达式呢?中国人民的身份证分为二种。一种是15位全部都是数字,第二种18位,最后一位是字母或数字。

分析正则
首位是数字不可以是0[1-9]
除去首末两位剩余13位数字或16位数字\d{13,16}
末尾可能是数字也可能是x[0-9x]

总结上面的情况正则如下

    var reg=/[1-9]\d{13,16}[0-9x]/;

仔细分析上面的代码是有问题的,它还可以匹配带16位的字符,这很显然不是身份证。仔细分析问题在“\d{13,16}”,这是数字可以出现13到16次,和预期是不一样的。我们想要的是要么13次要么16次。这是就需要分组了。
我们可以向下面这样书写正则表达式

    var reg=/[1-9]\d{14}(\d{2}[0-9x])?/;

括号的这种功能叫做分组,可以把括号中的内容看做一项,对其添加量词,控制其出现的次数。

2,多选结构

还是上面的身份证,还有没有别的匹配的方法呢?
我们可不可以这样想,15位的是一种情况,18位的是一种情况。二者只能是一种情况。这样更加好理解。这时要用到括号的多选结构了。

    var reg=/([1-9]\d{14}|[1-9]\d{16}[0-9x]/;

上面就是多选结构,匹配“|”的左侧或右侧。

3,引用分组

括号可以把有联系的元素分类在一起,还有其他的作用。正则表达式会保存每个分组匹配到的文本。可以在一些方法里面调用。

    var reg=/(\d)?(\w){3}/;

括号对应的编号从1开始,以左侧的括号出现的顺序为准。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值