正则表达式

144 阅读1分钟

声明方式

以下三种方式,创建新的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。