# 一些正则表达式
通过一些例子来学习正则表达式摘录,js正则函数match、exec、test、search、replace、split
# 一些匹配方法
# 去除首尾的
//去除首尾的‘/’
input = input.replace(/^\/*|\/*$/g,'');
@前端进阶之旅: 代码已经复制到剪贴板
# javascript:; 、javascript:void(0)
'javascript:;'.match(/^(javascript\s*\:|#)/);
//["javascript:", "javascript:", index: 0, input: "javascript:;"]
@前端进阶之旅: 代码已经复制到剪贴板
# 匹配
var str = "access_token=dcb90862-29fb-4b03-93ff-5f0a8f546250; refresh_token=702f4815-a0ff-456c-82ce-24e4d7d619e6; account_uid=1361177947320160506170322436";
str.match(/account_uid=([^\=]+(\;)|(.*))/ig);
@前端进阶之旅: 代码已经复制到剪贴板
# 匹配一些字符
var str = 'asdf html-webpack-plugin for "index/index.html" asdfasdf';
str.match(/html-webpack-plugin for \"(.*)\"/ig);
console.log(RegExp.$1) //=>index/index.html
@前端进阶之旅: 代码已经复制到剪贴板
# 关键字符替换
'css/[hash:8].index-index.css'.replace(/\[(?:(\w+):)?(contenthash|hash)(?::([a-z]+\d*))?(?::(\d+))?\]/ig,'(.*)');
//=> css/(.*).index-index.css
@前端进阶之旅: 代码已经复制到剪贴板
# 替换参数中的值
var str = '<!DOCTYPE html><html manifest="../../cache.manifest" lang="en"><head><meta charset="UTF-8">';
str.replace(/<html[^>]*manifest="([^"]*)"[^>]*>/,function(word){
return word.replace(/manifest="([^"]*)"/,'manifest="'+url+'"');
}).replace(/<html(\s?[^\>]*\>)/,function(word){
if(word.indexOf('manifest')) return word;
return word.replace('<html','<html manifest="'+url+'"');
});
//原:<!DOCTYPE html><html manifest="../../cache.manifest" lang="en"><head><meta charset="UTF-8">
//替换成=> <!DOCTYPE html><html manifest="cache.manifest" lang="en"><head><meta charset="UTF-8">
@前端进阶之旅: 代码已经复制到剪贴板
# 匹配括号内容
'max_length(12)'.match(/^(.+?)\((.+)\)$/)
// ["max_length(12)", "max_length", "12", index: 0, input: "max_length(12)"]
@前端进阶之旅: 代码已经复制到剪贴板
# 调换
var name = "Doe, John";
name.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1");
//=> "John Doe"
@前端进阶之旅: 代码已经复制到剪贴板
# 字符串截取
var str = 'asfdf === sdfaf ##'
str.match(/[^===]+(?=[===])/g) // 截取 ===之前的内容
str.replace(/\n/g,'') // 替换字符串中的 \n 换行字符
@前端进阶之旅: 代码已经复制到剪贴板
# 验证
# 小数点后几位验证
// 精确到1位小数
/^[1-9][0-9]*$|^[1-9][0-9]*\.[0-9]$|^0\.[0-9]$/.test(1.2);
// 精确到2位小数
/^[0-9]+(.[0-9]{2})?$/.test(1.221);
@前端进阶之旅: 代码已经复制到剪贴板
# 密码强度正则
// 必须是包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间。
/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$/.test("weeeeeeeW2");
//密码强度正则,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符
/^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$/.test("diaoD123#");
//输出 true
@前端进阶之旅: 代码已经复制到剪贴板
# 校验中文
/^[\u4e00-\u9fa5]{0,}$/.test("但是d"); //false
/^[\u4e00-\u9fa5]{0,}$/.test("但是"); //true
/^[\u4e00-\u9fa5]{0,}$/.test("但是"); //true
@前端进阶之旅: 代码已经复制到剪贴板
# 包含中文正则
/[\u4E00-\u9FA5]/.test("但是d") //true
@前端进阶之旅: 代码已经复制到剪贴板
# 由数字、26个英文字母或下划线组成的字符串
/^\w+$/.test("ds2_@#"); // false
@前端进阶之旅: 代码已经复制到剪贴板
# 身份证号正则
//身份证号(18位)正则
/^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/.test("42112319870115371X");
//输出 false
@前端进阶之旅: 代码已经复制到剪贴板
# 校验日期
“yyyy-mm-dd“ 格式的日期校验,已考虑平闰年。
//日期正则,简单判定,未做月份及日期的判定
var dP1 = /^\d{4}(\-)\d{1,2}\1\d{1,2}$/;
//输出 true
console.log(dP1.test("2017-05-11"));
//输出 true
console.log(dP1.test("2017-15-11"));
//日期正则,复杂判定
var dP2 = /^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/;
//输出 true
console.log(dP2.test("2017-02-11"));
//输出 false
console.log(dP2.test("2017-15-11"));
//输出 false
console.log(dP2.test("2017-02-29"));
// true
@前端进阶之旅: 代码已经复制到剪贴板
# 校验文件后缀
var strRegex = "(.jpg|.gif|.txt)";
var re=new RegExp(strRegex);
if (re.test(str)){
}
/(.jpg|.gif)+(\?|\#|$)/.test('a/b/c.jpgsss'); //=> false
/(.jpg|.gif)+(\?|\#|$)/.test('a/b/c.jpg?'); //=> true
@前端进阶之旅: 代码已经复制到剪贴板
# 用户名正则
//用户名正则,4到16位(字母,数字,下划线,减号)
/^[a-zA-Z0-9_-]{4,16}$/.test("diaodiao");
//输出 true
@前端进阶之旅: 代码已经复制到剪贴板
# 整数正则
/^\d+$/.test("42"); //正整数正则 -> 输出 true
/^-\d+$/.test("-42"); //负整数正则 -> 输出 true
/^-?\d+$/.test("-42"); //整数正则 -> 输出 true
/^[0-9]+$/.test(25.5455) //正整数正则 -> 输出 false
// 浮点数
/^(?:[-+])?(?:[0-9]+)?(?:\.[0-9]*)?(?:[eE][\+\-]?(?:[0-9]+))?$/.test(0.2)
@前端进阶之旅: 代码已经复制到剪贴板
