正则表达式是一种强大的文本处理工具,用于匹配字符串中的特定模式。在 JavaScript 中,正则表达式被广泛用于字符串的搜索、替换、验证等操作。
正则表达式用来定义一个规则
通过这个规则计算机可以检查一个字符串是否符合规则,或者将字符串中符合规则的内容提取出来。
正则表达式也是JS中的一个对象,所以要使用正则表达式,需要先创建正则表达式的对象。
创建 new RegExp()
 // new RegExp() 可以接收两个参数(字符串) 1.正则表达式 2.匹配模式
let reg = new RegExp("a", "i") // 通过构造函数来创建一个正则表达式的对象
let reg = /a/ilet reg = new RegExp("a", "i") 和 let reg = /a/i 这两行代码定义了一个正则表达式 reg,它匹配字母 "a",并且忽略大小写(由于使用了 "i" 标志)。
字面量 xx = /?/
// 使用字面量来创建正则表达式:/正则/匹配模式
let reg = /\w/let reg = /\w/ 这行代码将 reg 重新定义为匹配任何字母、数字或下划线的正则表达式(\w 是一个字符类)。
let reg = new RegExp("\\w")
    reg = new RegExp("a") // /a/ 表示,检查一个字符串中是否有areg = new RegExp("\\w") 这行代码将 reg 重新定义为匹配任何字母、数字或下划线的正则表达式。在 JavaScript 中,字符串中的反斜杠是一个转义字符,所以我们需要使用两个反斜杠 \\ 来表示一个实际的反斜杠。因此,"\\w" 在正则表达式中表示 \w,它是一个字符类,匹配任何字母、数字或下划线。
reg = new RegExp("a") 这行代码将 reg 重新定义为匹配字母 "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);let str = "a" 这行代码定义了一个字符串 str,内容为 "a"。
let result = reg.test(str) 这行代码使用正则表达式 reg 测试字符串 str,并将结果存储在 result 中。由于 reg 最后被定义为匹配 "a",所以 result 为 true。
result = reg.test("b") 这行代码测试字符串 "b",由于 "b" 不匹配 "a",所以 result 为 false。
result = reg.test("abc") 这行代码测试字符串 "abc",由于字符串中包含 "a",所以 result 为 true。
result = reg.test("bcabc") 这行代码测试字符串 "bcabc",由于字符串中包含 "a",所以 result 为 true。
reg = /a/ 这行代码将 reg 重新定义为匹配字母 "a" 的正则表达式。
console.log(result) 这行代码输出 result 的值。由于前面的测试结果是 true,所以控制台将输出 true。
大部分字符都可以直接写
let re = /ab/
let result = re.test('abc')| 在正则表达式中表示或
let re = /abc|bcd/
let result = re.test('c') //false[] 表示或(字符集)
[a-z] 任意的小写字母
[A-Z] 任意的大写字母
[a-zA-Z] 任意的字母
[0-9]任意数字
let re = /[ab]/ 
    re = /[a-z]/i    //匹配模式i 表示忽略大小写
let result = re.test('c') //false
let result = re.test('a') //true[^] 表示除了
[^x] 除了x
let re = /[^a-z]/   //匹配包含小写字母以外内容的字符串
let result = re.test('c') //false
let result = re.test('aH') //true. 表示除了换行外的任意字符
let re = /./ 
let result = re.test('aH') //true在正则表达式中使用\作为转义字符
let re = /\./   //表示只匹配.
let result = re.test('c') //false其他的字符集
\w 任意的单词字符 [A-Za-z0-9_]
\W 除了单词字符 [^A-Za-z0-9_]
\d 任意数字 [0-9]
\D 除了数字 [^0-9]
\s 空格
\S 除了空格
\b 单词边界
\B 除了单词边界
开头和结尾
^ 表示字符串的开头
let re = /^a/   //表示匹配开始位置的a
let result = re.test('c') //false$ 表示字符串的结尾
let re = /a$/   //表示匹配结束位置的a
    re = /^a$/ //完全匹配,只匹配字母a,要求字符串必须和正则完全一致
let result = re.test('a') //true
console.log(result){m} 正好m个
let re = /a{3}/ 
    re = /^ab{3}$/ //实际上匹配的是 abbb
    re = /^(ab){3}$/
let result = re.test("aaa") // true{m,} 正少m个
let re = /^(ab){1,}$/ {m,n} 正少m-n个
let re = /^(ab){1,3}$/ + 一个以上,相当于{1,}
let re = /^ba+$/ * 任意数量
let re = /^ba*$/ ? 0-1次,相当于{0,1}
let re = /^ba?$/ 获取字符串中符合正则表达式的内容
g表示全局匹配
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)
}小练习
/* 
    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"))split( ) 根据正则表达式对一个字符串拆分
let str = "孙悟空abc猪八戒abc沙和尚"
let result = str.split(/a[bc]c/)
console.log(result) // (3) ['孙悟空', '猪八戒', '沙和尚']search( ) 搜索第一次在符合正则表达式的内容出现的位置
let str = "dajsdh13715678903jasdlakdkjg13457890657djashdjka13811678908sdadadasd"
let result = str.search(/1[3-9]\d{9}/)
console.log(result) // 6replace( ) 根据正则表达式替换字符串中的指定内容
let result = str.replace(/1[3-9]\d{9}/g, "哈哈哈")match( ) 根据正则表达式去匹配字符串中符合要求的内容
let str = "dajsdh13715678903jasdlakdkjg13457890657djashdjka13811678908sdadadasd"
let result = str.match(/1[3-9]\d{9}/g)
console.log(result) // (3) ['13715678903', '13457890657', '13811678908']matchAll() 根据正则表达式去匹配字符串中符合要求的内容(必须设置g 全局匹配)
它返回的是一个迭代器
let result = str.matchAll(/1[3-9]\d{9}/g)
for(let item of result){
    console.log(item)
}和生活一样,生活时间长了以后会产生生活垃圾。程序运行一段时间后也会产生垃圾。
在程序的世界中,什么是垃圾?
如果一个对象没有任何的变量对其进行引用,那么这个对象就是一个垃
垃圾对象的存在,会严重的影响程序的性能
在JS中有自动的垃圾回收机制,这些垃圾对象会被解释器自动回收,我们无需手动处理
对于垃圾回收来说,我们唯一能做的事情就是将不再使用的变量设置为null
let obj = {name:"孙悟空"}
let obj2 = obj
obj = null
obj2 = null