JavaScript - 正则表达式
编辑正则表达式是一种强大的文本处理工具,用于匹配字符串中的特定模式。在 JavaScript 中,正则表达式被广泛用于字符串的搜索、替换、验证等操作。
正则表达式
>简介
正则表达式用来定义一个规则
通过这个规则计算机可以检查一个字符串是否符合规则,或者将字符串中符合规则的内容提取出来。
正则表达式也是JS中的一个对象,所以要使用正则表达式,需要先创建正则表达式的对象。
创建 new RegExp()
// new RegExp() 可以接收两个参数(字符串) 1.正则表达式 2.匹配模式
let reg = new RegExp("a", "i") // 通过构造函数来创建一个正则表达式的对象
let reg = /a/i
let 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/ 表示,检查一个字符串中是否有a
reg = 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?$/
>exec方法
获取字符串中符合正则表达式的内容
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) // 6
replace( ) 根据正则表达式替换字符串中的指定内容
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
- 2
- 0
-
分享