JS( 二 )


3_正则表达式的常用规则 3.1_字符类( )
字符类( ) 是一个特殊的符号,匹配特定集中的任何符号
字符含义
\d(“d” 来自 “digit”)
数字:从 0 到 9 的字符
\s(“s” 来自 “space”)
空格符号:包括空格,制表符 \t,换行符 \n 和其他少数稀有字符,例如 \v,\f 和 \r
\w(“w” 来自 “word”)
单字”字符:拉丁字母或数字或下划线 _
.(点)
一种特殊字符类,它与 “除换行符之外的任何字符” 匹配
反向类( )
转换成大写字母,就可以把字符的规则反向
3.2_锚点()
符号 ^ 和符号 $ 在正则表达式中具有特殊的意义,它们被称为“锚点” 。
const message = "My name is WHY."// 字符串方法必须百分百匹配,不能忽略大小写if (message.startsWith("my")) {console.log("以my开头")}else{console.log("err: 以my开头") //err: 以my开头}if (message.endsWith("why")) {console.log("以why结尾")}else{console.log("err:以why结尾") //err:以why结尾}// 正则: 锚点可以忽略大小写字母if (/^my/i.test(message)) {console.log("以my开头") //以why开头}if (/why\.$.test(message)) {console.log("以why结尾")//以why结尾}const re = /^coder$/const info = "codaaaer"console.log(re.test(info)) // false
词边界(Word )
const message = "My name! is WHY."// 需求: name, name必须是一个单独的词,不能是组合词// 词边界if (/\bname\b/i.test(message)) {console.log("有name, name有边界") //有name, name有边界}// 词边界的应用从一句话中,提取时间const infos = "now time is 11:56, 12:00 eat food, number is 123:456"const timeRe = /\b\d\d:\d\d\b/igconsole.log(infos.match(timeRe))//(2) ['11:56', '12:00']
3.3_转义字符串
特殊字符作为常规字符来使用,需对其进行转义,只需在前面加个反斜杠\
常见的需要转义的字符: [ ] \ ^ $ . | ? \ * + ( )
斜杠符号 ‘/’ 并不是一个特殊符号,但是在字面量正则表达式中也需要转义;
练习:匹配所有以.js或者jsx结尾的文件名
在当中,匹配文件名时就是以这样的方式 。
// 定义正则: 对.转义const re = /\./igconst message = "abc.hihi"const results = message.match(re)console.log(results)//['.'] // 特殊: /对正斜杠进行转义// const re2 = /\//// 获取到很多的文件名// jsx -> js文件const fileNames = ["abc.html", "Home.jsx", "index.html", "index.js", "util.js", "format.js"]// 获取所有的js的文件名(webpack)// 问号?跟在正则表达式后面,具体表示匹配前面的一次或者0次,类似于{0,1},如:abc(d)?可匹配abc和abcd// 不加问号?的话,遍历只能找到第一个符合规则的,反之能找到多个符合规则的元素 。const jsfileRe = /\.jsx?$/// 1.for循环做法const newFileNames = []for (const filename of fileNames) {if (jsfileRe.test(filename)) {newFileNames.push(filename)}}console.log(newFileNames) //['Home.jsx', 'index.js', 'util.js', 'format.js']// 2.filter高阶函数函数作为参数输入 。将符合条件的挑选出来,不符合条件的过滤掉 。const newFileNames2 = fileNames.filter(filename => jsfileRe.test(filename))
3.4_集合(Sets)和范围()
在方括号 […] 中的几个字符或者字符类意味着“搜索给定的字符中的任意一个;
集合(Sets): 比如说,[eao] 意味着查找在 3 个字符 ‘a’、‘e’ 或者 ‘o’ 中的任意一个;
范围()
// 手机号的规则: 1[3456789]033334444const phoneStarts = ["132", "130", "110", "120", "133", "155"]// 筛选出以1开头,然后第二位数字在3~9范围内的元素const phoneStartRe = /^1[3456789]\d/const filterPhone = phoneStarts.filter(phone => phoneStartRe.test(phone))console.log(filterPhone)//(4) ['132', '130', '133', '155']const phoneNum = "133888855555"const phoneRe = /^1[3-9]\d{9}$/console.log(phoneRe.test(phoneNum)) //flase