核心提示:1.分组如果想要用正则匹配身份证,要怎么写正则表达式呢?中国人民的身份证分为二种。一种是15位全部都是数字,第二种18位,最后一位是字母或数字。 分析 正则 首位是数字不可以是0 [1-...
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开始,以左侧的括号出现的顺序为准。