声明方式
以下三种方式,创建新的RegExp都行(注意是右斜杠/)
/ab+c/i; //字面量形式
new RegExp('ab+c', 'i'); // 首个参数为字符串模式的构造函数
new RegExp(/ab+c/, 'i'); // 首个参数为常规字面量的构造函数
g:找出所有,i:不区分大小写
常用方式
string的search()、replace()、match()方法中常用到正则
search返回对应的index位置,replace返回替换后的字符串、match返回匹配的字符串数组。
还有一种是RegExp对象自己的,test方法,判断字符串是否满足正则表达式,满足则返回true。
常见题目
验证QQ号:
let reg = /^[1-9][0-9]{4,9}$/g;
reg.test(qqStr)
// ^匹配开头,$匹配结尾,{}指这样的数字有几个,也就是位数。
提取url中的参数:
function getQueryString(name) {
var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
// 是字符串开始位置(^)或者是&,然后要找的name,然后=号+除了&的所有字符(方括号中的^是除了什么什么以外,*表示0到任意个),然后以下一个&结尾或者是字符串尾部。
var r = window.location.search.substr(1).match(reg);
// location的search属性表示?开始的url部分,href属性指完整地url。substr、substring、slice功能一样,都是截取片段。但substr的2参数是截取字符串的长度,substring、slice的2参数都是索引结束位置。
// 然后是match方法,match方法的返回值根据i和g分为两类,如果是g,则返回所有匹配结果的数组,如果是i则返回具体信息数组,第0项是匹配到的那一个完整值,后面的项是匹配到的子字符串,每一项都是模糊匹配到的具体值,例如上面的'(^|&)'、([^&]*)、(&|$)是模糊的,name、=都是确定的,所以123项是三个迷糊匹配的具体值。我们要的参数value就是r[2]了。另外,为i时,还有index(位置)和input(输入值)属性,这两个是为g时没有的。如果没有找到匹配的,都返回null。
if (r != null) {
return decodeURI(r[2]);
// decodeURI对encodeURI函数编码过的URI进行解码
}
return null;
}
实现trim:
function trim(string){
return string.replace(/^\s+|\s+$/g, '')
}
// \s匹配空白字符,S\匹配非空白,+表示一个或者多个。所以意思是,去掉字符串前面和后面所有的空格。
验证ip地址
String chunkIPV4 ="([0-9] | [1-9][0-9] | 1[0-9]{2} | 2[0-4][0-9] | 25[0-5])"
Pattern pattenIPv4 = Pattern.compile("^(" + chunkIPv4 + "\.){3}" + chunkIPv4 + "$");
// ip规则是大小0-255,一共四个,不能以0开头(如01),所以首先考虑一个8位怎么写,包括所有1位数、所有两位数、100-200、200-249、250-255。