年龄段
匹配 18 - 65 的年龄段:
分段匹配:
18-19
20-59
60-65
//=> 小括号可以不用,只是用于捕获var reg = /^(1[89])|([2-5]\d)|(6[0-5])$/
匹配 [object xxx]
中括号由于具有特殊含义,需要进行转义
let reg = /^\[object .+\]$/
有效数字
正数 负数 零
小数 整数
分析规则:
可以出现正负号,可以没有,也可以有一个
整数:一位或者多位,0-9,多位数字不能以 0 开头
小数部分:可能有可能没有,有小数点后面至少跟一位数字
let reg = /^[+-]?(\d|[1-9]\d+)(\.\d+)?$/;
千分位分割
需要实现下列情形:
1,234,567
12,345,678
123,456
思路:
捕获所有需要在后面加 , 号的数字,将其替换为 本身加 , 号
捕获一个数字,后面带有三的倍数个数字
后面可以有或者没有小数结尾
匹配某个数字,后面带有 3 的倍数个数字,后面可能有小数,并以此结尾
let reg = /(\d)(?=(\d{3})+(\.\d+)?$)/gmoney.replace(reg, '$1,')
手机号
中国:
11位数
以 1 开头
let reg = /^1\d{10}$/;
中文姓名
中文汉字
[\u4E00-\u9FA5]xxx · xxx
let reg = /^[\u4E00-\u9FA5]{2,}(·[\u4E00-\u9FA5]{2,})?$/
邮箱
xxx@xxx.xxx.xxx.xx @email.szu.edu.cn,@后面还可以是 IP 地址,前面可以是中文等
第一部分:数字、字母、下划线、
-、.,但是中杠和点不能开头,不能连续出现,所以出现的时候,后面必须跟着其他字符第二部分:域名的名字只能是数字和字母
最简单:
/.+@.+/
let reg = /^\w+([-.]\w+)*@[a-zA-Z0-9]+([-.][a-zA-Z0-9]+)*\.[a-zA-Z0-9]+$/
身份证信息
公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
地址码
表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。出生日期码
表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。顺序码
表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。校验码
根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。
身份证信息的规律:
18 位
前六位是省市区
中间八位是出生年月日
后面三位是顺序码,顺序码中最后一位是偶数是女,奇数是男
最后一位是校验码
需求:
根据身份证号码,展示出这个人的基本信息:
xxxx年xx月xx日出生,性别xx
用正则编写的思路:
匹配整个字符串,在正则中把需要的信息加进分组中
捕获分组信息
把分组信息拼接成想要的结果
var reg = /^\d{6}(\d{4})(\d{2})(\d{2})\d{2}(\d)[\dX]/;var str = '130425199001271013';//=> 使用 matchvar ary = str.match(reg);var str2 = `${ary[1]}年${ary[2]}月${ary[3]}日出生性别:${ary[4]%2 === 0? "女" : "男"}`;console.log(str2);//=> 使用 replacevar str3 = str.replace(reg, function() {var ary = [...arguments];return `${ary[1]}年${ary[2]}月${ary[3]}日出生性别:${ary[4]%2 === 0? "女" : "男"}`;});console.log(str3)
时间字符串格式化
通过正则,把下面的日期字符串转化为对应的汉字的年月日时间
var str = "2018/08/08 12:24:34"//=> splitvar reg = /[\/ :]/g; //=> 注意的是 / 后面不能直接接 -,都需要进行转义var ary = str.split(reg);var str2 = `今天是${ary[0]}年${ary[1]*1}月${ary[2]*1}日 ${ary[3]< 10 ? "上午":(ary[3] < 14? "中午" : "下午")}${ary[3]}点${ary[4]}分${ary[5]}秒`;//=> replacevar reg = /(\d+)[\/-](\d+)[\/-](\d+) (\d+):(\d+):(\d+)/var str4 = str.replace(reg, function(...ary) {return `今天是${ary[1]}年${ary[2]*1}月${ary[3]*1}日 ${ary[4]< 10 ? "上午":(ary[4] < 14? "中午" : "下午")}${ary[4]}点${ary[5]}分${ary[6]}秒`});//=> matchvar reg = /(\d+)\/(\d+)\/(\d+) (\d+):(\d+):(\d+)/var ary = str.match(reg);var str4 = `今天是${ary[1]}年${ary[2]*1}月${ary[3]*1}日 ${ary[4]< 10 ? "上午":(ary[4] < 14? "中午" : "下午")}${ary[4]}点${ary[5]}分${ary[6]}秒`;
复用方法:
//=> 1. 获取时间字符串中所有的数字//=> 只需要匹配数值,不管什么分隔符,使用 match 方法let reg = /(\d+)/g;let ary = str.match(reg).map((item) => {return item < 10 ? '0' + item : item;}); //=> map 相对于 forEach 来说多了返回值,函数中返回的是啥,就把当前数组中迭代的这一项替换成啥//=> 2. 指定最后想要的时间格式,我们基于这个数组的内容,帮你拼接好即可let template = '{0}年{1}月{2}日 {3}时{4}分{5}秒'template = template.replace(/\{(\d)\}/g, (...arg){return ary[arg[1]];})
URL 问号参数
var str = "https://www.souyidai.com/soeasy/invest/onlinelist?productType=1&pageNo=0&repayMode=-1&orderBy=DEFAULT&t=0.642114887216358";/* 获取字符串中的参数 */var reg = /[^?=&]+=[^?=&]+/g;var ary = str.match(reg);
