【JavaScript】22_正则表达式与字符串匹配

117 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第24天,点击查看活动详情

正则表达式

正则表达式

  • 正则表达式用来定义一个规则
  • 通过这个规则计算机可以检查一个字符串是否符合规则

或者将字符串中符合规则的内容提取出来

  • 正则表达式也是JS中的一个对象,

所以要使用正则表达式,需要先创建正则表达式的对象

new RegExp() 可以接收两个参数(字符串) 1.正则表达式 2.匹配模式

     <script>
         let reg = new RegExp('a','i')//通过一个构造函数来创建一个正则表达式的对象
 ​
         //使用字面量来创建正则表达式:/正则/匹配模式
         reg = /a/i
         reg = /\w/
         reg = new RegExp('\w')
         console.log(reg)
 ​
         reg = new RegExp('a')//  /a/表示,检查一个字符串中是否有a
         
         // 通过正则表达式检查一个字符串是否符合规则
         let str = "a"
 ​
         let result = reg.test(str) // true
 ​
         result = reg.test("b") // false
         result = reg.test("abc") // true
         result = reg.test("bcabc") // true
 ​
         reg = /a/
         console.log(result);
     </script>

语法

1.在正则表达式中大部分字符都可以直接写 2.| 在正则表达式中表示或 3.[] 表示或(字符集) [a-z] 任意的小写字母 [A-Z] 任意的大写字母 [a-zA-Z] 任意的字母 [0-9]任意数字 4.[^] 表示除了 x 除了x

  1. . 表示除了换行外的任意字符
  2. 在正则表达式中使用\作为转义字符
  3. 其他的字符集 \w 任意的单词字符 [A-Za-z0-9 ] \W 除了单词字符 [^A-Za-z0-9] \d 任意数字 [0-9] \D 除了数字 0-9 \s 空格 \S 除了空格 \b 单词边界 \B 除了单词边界
  4. 开头和结尾 ^ 表示字符串的开头 $ 表示字符串的结尾
     <script>
         let re = /abc|bcd/
         re = /[a-z]/
         re = /[A-Z]/
         re = /[A-Za-z]/
         re = /[a-z]/i // 匹配模式i表示忽略大小写
         re = /[^a-z]/ // 匹配包含小写字母以外内容的字符串
         re = /./
         re = /./
 ​
         re = /\w/
         re = /^a/ // 匹配开始位置的a
         re = /a$/ // 匹配结束位置的a
         re = /^a$/ // 只匹配字母a,完全匹配,要求字符串必须和正则完全一致
         re = /^abc$/
         let result = re.test('aa')
         console.log(result)
     </script>

量词

{m} 正好m个

{m,} 至少m个

{m,n} m-n个

  • 一个以上,相当于{1,}
  • 任意数量的a

? 0-1次 {0,1}

     <script>
         let re = /a{3}/
         re = /^a{3}$/
         re = /^(ab){3}$/
         re = /^[a-z]{3}$/
         re = /^[a-z]{1,}$/
         re = /^[a-z]{1,3}$/
         re = /^ba+$/
         re = /^ba*$/
         re = /^ba?$/
         let result = re.test("baa")
         console.log(result)
     </script>

re.exec()

  • 获取字符串中符合正则表达式的内容
     <script>
         let str = "abcaecafcacc"
 ​
         //提取出str中复合axc格式的内容
         //g 表示全局匹配
         let re = /a(([a-z])c)/ig
 ​
         let result = re.exec(str)
         console.log(result)
 ​
         while(result){
             console.log(result[0],result[1],result[2])
             result = re.exec(str)
         }
     </script>

练习

     <script>
         /* 
             dajsdh13715678903jasdlakdkjg13457890657djashdjka13811678908sdadadasd
 ​
             用自己的语言来把描述出来
                 1    3         501789087
                 1    3到9之间   任意数字 x 9
         */
         let re = /1[3-9]\d{9}/g
         re = /(1[3-9]\d)\d{4}(\d{4})/g
         let str =
             "dajsdh13715678903jasdlakdkjg13457890657djashdjka13811678908sdadadasd"
 ​
         let result
 ​
         while (result = re.exec(str)) {
             // console.log(result[0], result[1], result[2])
             console.log(result[1]+"****"+result[2])
         }
         re = /^1[3-9]\d{9}$/
         console.log(re.test("13456789042"))
     </script>

字符串

split()

  • 可以根据正则表达式来对一个字符串进行拆分

search()

  • 可以去搜索符合正则表达式的内容第一次在字符串中出现的位置

replace()

  • 根据正则表达式替换字符串中的指定内容

match()

  • 根据正则表达式去匹配字符串中符合要求的内容

matchAll()

  • 根据正则表达式去匹配字符串中符合要求的内容(必须设置g 全局匹配)
  • 它返回的是一个迭代器
     <script>
         let str = "a@b@c@d"
         let result = str.split("@")
 ​
         str = "孙悟空abc猪八戒adc沙和尚"
         result = str.split(/a[bd]c/)
         str =
             "dajsdh13715678903jasdlakdkjg13457890657djashdjka13811678908sdadadasd"
 ​
         result = str.search("abc")
         result = str.search(/1[3-9]\d{9}/)
         result = str.replace(/1[3-9]\d{9}/g, "哈哈哈")
         result = str.match(/1[3-9]\d{9}/g)
         result = str.matchAll(/1[3-9](\d{9})/g)
         
         for(let item of result){
             console.log(item)
         }
     </script>