正则表达式

98 阅读4分钟

正则

  1. 正则表达式(规则表达式) * 由我们自己去书写一个规则,专门用来检测字符串,是否符合我们的规则

  2. 创建正则的方式 * 字面量 js var reg = /abc/ // 要求这个字符串中需要包含'abc' * 内置构造函数 js var reg = new RegExp('qwe') // 要求这个字符串包含'qwe'

  3. 正则的元字符 * 在正则中有一些特殊符号有特殊含义我们把这个符号叫做元字符 // 这些元字符只要包含一个满足条件的字符即可 js /\w/ // 匹配数字字母下划线 (A-Z,a-z,0-9,_) /\W/ // 匹配非数字字母下划线 (除了A-Z,a-z,0-9,_) /\d/ // 匹配数字 (0-9) /\D/ // 匹配非数字 (除0-9) /\s/ // 匹配空白字符,空格(' ') /\S/ // 匹配非空白字符 /./ // 匹配任意非换行字符 /\/ // 转义符号 (只对他后面紧跟的那一个有用) /\./ // 要求字符串中包含小数点(有特殊含义转为没有特殊含义,没有特殊含义变成有特殊含义,若是正则表达式中转义后没有特殊含义加上也没用)

  4. 正则检测方法 js var reg = /\s/ var str1 = 'abc' var str2 = 'a bc' // 正则检测方法为 正则.test(字符串或者函数) 函数的话必须要只有字符串 console.log(reg.test(str1)) // 输出布尔值false console.lgo(reg.test(str2)) // 输出布尔值true js var reg = /\d/ var str1 = 'abc' var str2 = 'abc1' var str3 = '123' console.log(reg.test(str1,str2,str3)) // false,true,true, 只要包含数字就为true

  5. 正则的限定元字符 * 一般是和元字符连在一块使用,限制了前面的元字符出现了几次 * 非严格模式就是包含,只要有数字就代表包含数字,严格模式限制最多

* \d* // 表示含义是前面包含内容,至少出现0次
+ \d+ // 表示前一个内容包含内容,至少出现1次
? \d? // 表示的是前一个包含内容重复,0或者1次 (包含'1''2''3'这个数字)
{n} \d{3} // 表示的是前一个包含内容重复,n次 (包含'1''2''3'这个数字) ,只能出现这个次数的这个数字
{n,} \d{3,} // 表示的含义是前一个内容,至少重复n次 (包含'1''2''3'这个数字)
{n,m} \d{3,5} // 表示的含义是前一个内容,至少重复n次,最多重复m次 (包含'1''2''3'这个数字)
  1. 正则边界符 js ^ // 表示开头,一般写在正则开头位置 ,/^abc/ 表示字符串是abc开头 $ // 表示结尾,一般写在正则结尾位置 ,/abc$/ 表示字符串是abc结尾 /^abc$/ // 表示严格模式,必须是这个字符 // 严格模式下正则就变成了必须是什么样子的

  2. 正则的特殊元字符

/(abc){2}/ // 当做一个一个整个,单独捕获,就是把abc当做一个整体,出现两次
/a|b/ // 或:符号左边的字符或者符号右边的字符满足一个就可以,或的分界线为:如果没有小括号那么直接将正则分为两个正则 即:var reg = /^abc|def$/ == /^abc/ 和 /def&/,如果有小括号那么或到小括号就结束了即:var reg = /^ab(c|d)ef$/ == /^abcef$/ 或者 /^abdef$/
/[a-z]/ // 包含其中的一个就行,注意:中括号只占用一个字符
/[^a-z]/ // 除了这些之外的都可以,注意:中括号只占用一个字符
/a-z/ // 到的意思,一般是和包含或者不包含一块用
  1. 正则的重复元字符
/\1/ /\2/ /\3/ /\4/ // 代表正则中第几个小括号中的值 
/^<(div|p)><\/\1>$/ // 写一个div或者p标签
  1. 正则的标识符(正则的修饰符) // 只能写在正则表达式的后面
i // 不区分大小写
g // 全局捕获
  1. 正则的捕获
正则.exec(字符串)
// 没有符合条件的字符时捕获的内容为一个null
// 正则没有小括号也没有修饰符g,每一次捕获都是从字符串下标0的位置开始捕获,捕获到符合条件的位置就结束,将捕获到的内容放到一个数组中下标为0的位置
// 正则没有小括号但是有修饰符g,每一次捕获时会从上一次捕获结束的位置开始捕获一直到某一次捕获不到内容会返回一个null,如果继续下一次捕获那么会从新从字符串[0]的位置重新开始捕获
// 正则有小括号捕获的时候会将捕获到的内容放到数组[0]的位置,将正则中每个小括号内的内容从[1]的位置依次放过去
  1. 正则的两大特性 * 懒惰:每一次捕获的时候都会从[0]的位置开始 * 解决方法:给正则后加一个g * 贪婪:每一次捕获的时候都尽可能地多去捕获内容 * 解决方法:使用非贪婪的限定符('*?','+?','??','{n}?','{n,m}?')

  2. 字符串中能跟正则一块用的方法 * search:查找,如果能找到满足条件的字符串片段,返回字符串的下标,如果找不到返回-1 js console.log(str1.search(reg1)) // 字符串的方法 * match:查找,找到字符串中符合正则的部分返回出来,如果正则没有修饰符g,那么他跟正则的exec是一样的,如果正则有修饰符g会将捕获到的所有满足条件的内容放在一个数组中返回出来 * replace:找到字符串中符合正则规则的部分,将这部分替换出来 js console.log(str1.replace(reg1,'***'))