1. 正向预查
1.1 千分位分隔符
例: 1000000 => 1,000,000
var reg = /(?=(\B)(\d{3})+$)/g;
var str = '1000000';
str.replace(reg,',');
正则解释: 主体字符串为空字符串,匹配后面是以非单词边界且是3的倍数个数字结尾的空字符串,然后将其替换为逗号
2. 反向预查
2.1 匹配前面是aa的字符串,并替换为-
例: aabbccbbaadd => aa-bcc-baa-d
var reg = /(?<=aa)\w/g;
var str = 'aabbccbbaadd';
str.replace(reg,'-');
3. 模板替换
3.1 模板替换原理
var str = `收款人: {{name}} 收款金额: {{money}}`;
var reg = /{{(.*?)}}/g;
var resStr = str.replace(reg, function(matchStr, key){
// matchStr 表示匹配到的字符串 key 表示匹配的子表达式(可传任意个)
return {
name: '张三',
money: '1000',
}[key]
})
3.2 简易模板引擎
<script type="text/html" id="tpl">
<h1>{{title}}</h1>
<p>{{text}}</p>
<div>{{info}}</div>
</script>
<script>
var tpl = document.querySelector("#tpl");
var body = document.body;
var reg = /{{(.*?)}}/g; // ? 表示非贪婪模式
var obj = {
title: "这是一个简单的模板引擎",
text: "完成了很开心",
info: "哈哈哈哈哈哈哈哈哈",
};
body.innerHTML = tpl.innerHTML.replace(reg, function (matchStr, key) {
return obj[key];
});
</script>
4. 常用正则
4.1 验证身份证
基本规则:开头为非0数字,后面接任意5位数字;年份以18,19,20开头;月份1-9月以0开头;日期01-31号;后接3位数字,结尾为数字或者X,总共18位.
var reg = /^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])([0-2][1-9]|10|20|30|31)\d{3}[\d|X]$/;
4.2 验证密码
基本规则:至少包含6位,且包含大小写,数字,特殊字符.
var reg = /^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[~!@#$%^&*()-+_=?]).*$/
4.3 验证图片格式
基本规则:格式为jpg,png,gif等.
var reg = /(\.jpg|\.png|.gif)/
有些图片后缀存在其他参数,因此可以不用判断结尾