1. String类型提供的正则相关函数
2. RegExp对象
一. String类型提供的正则相关函数
1. 查找敏感词
(1). 查找一个固定的敏感词出现的位置:
var i=str.indexOf("敏感词",fromi)
(2). 用正则模糊查找一个敏感词的位置:
var i=str.search(/正则/i)
(3). 查找敏感词的内容:
a. 查找一个敏感词的内容和位置
var arr=str.match(/正则/i)
强调: 不加g时,match返回的arr数组中只有一个敏感词,但是,即有内容,又有位置:
arr=["0":"敏感词内容","index":"敏感词位置"]
b. 查找所有敏感词的内容
var arr=str.match(/正则/ig)
强调: 加g后,match返回的arr数组中包含所有敏感词的内容,但是,无法显示每个敏感词的位置!
arr=["敏感词1","敏感词2","敏感词3",...]
0 1 2
match如果找不到,返回null!
今后,如果一个函数,有可能返回null!都必须先验证不是null!才能继续使用!如果是null,还要提供备选方案!
(4). 既查找所有敏感词,又能获得每个敏感词的位置
reg.exec()
2. 替换敏感词
(1). 简单替换: 将所有敏感词都替换为统一的新值
a. str=str.replace(/正则/ig, "新值")
b. 将str中所有符合正则要求的敏感词都替换为统一的新值,返回新的字符串,保存到变量中。
强调: 字符串在多数编程语言中都是不可变类型!
一旦创建,内容不可改变!
所以,所有字符串家的函数: replace(), toUpperCase(), toLowerCase(),都无权修改原字符串,只能返回新字符串。所以,要想获得新字符串,都必须用变量接住返回值。如果不用变量接,则函数肯定执行了,也有返回值,只不过,返回值没人要,被垃圾回收!
vs 数组在js中是可变类型!所以几乎所有数组家提供的函数: sort(), reverse(), push()都不用变量接返回值,而是直接修改原数组!
(2). 高级替换: 根据每个敏感词的不同,动态选择不同的新值替换。
a. str=str.replace(/正则/ig, function(keyword){
return 根据接受的不同的敏感词,返回不同的新值
})
b. 原理:
1). replace会用正则表达式在字符串str中查找所有敏感词。
2). 每找到一个敏感词,就自动调用一次回调函数。每次调用回调函数时,都会自动将本次找到的敏感词传给回调函数的参数keyword。
3). 在回调函数内部,根据本次传入的敏感词是什么,来动态返回不同的新值。
4). replace会自动将回调函数返回的新值,替换到字符串中本次找到的敏感词的位置。
回调函数: 我们自己定义的函数,但是自己不调用,而是传给别的函数,由别的函数去调用。
特点: 何时调用不知道!调用几次不知道!每次调用传什么参数值也不知道!
学习方法:
1. 输出!
2. 画图!
(3). 删除敏感词: 其实就是把敏感词替换为""
3. 切割字符串: 将一个字符串按指定的切割符,切割为多段子字符串。
(1). 简单切割: 切割符是固定的
a. var arr=str.split("切割符");
b. 将字符串str,按指定的"切割符"切割为多段子字符串。
c. 返回值:
1). 返回切割后的多段子字符串组成的数组
2). 切割的结果中,不包含切割符
(2). 复杂切割: 切割符不是固定的
a. var arr=str.split(/正则/);
b. 将字符串str,按每个符合正则要求的切割符,切割为多段子字符串。
c. 返回值:
1). 返回切割后的多段子字符串组成的数组
2). 切割的结果中,不包含切割符
d. 强调: 切割时,即使不加g,也能找到所有切割符,切割。
(3). 将字符串打散为字符数组:
a. 问题: 虽然字符串长得像数组(下标, .length),但是因为不是数组家孩子,所以无法使用数组家的函数。
b. 何时: 如果字符串也想调用数组家的函数,就可先打散字符串为字符数组,再调用数组家函数。最后,将处理后的字符数组,再用join("")无缝拼接回字符串。
c. 如何: var arr=str.split("")
d. 返回值: 由打散字符串后的多个字符组成的字符数组。
二. RegExp对象:
1. 什么是RegExp对象: 专门保存一条正则表达式,并提供用正则表达式执行验证和查找功能的函数 的对象
2. 为什么: 因为正则表达式本不属于js语言,js语言默认不认识正则表达式!所以需要专门的对象来帮助js解析和使用正则表达式。
3. 何时: 只要在js中使用正则表达式,都要先创建正则表达式对象,再使用。
4. 如何:
(1). 创建正则表达式对象:
a. 用//创建: var reg=/正则/ig
1). 何时: 如果正则表达式是固定不变的,才可用//创建
2). 比如: 电子邮件,手机号,身份证号,车牌照
b. 用new创建: var reg=new RegExp("正则","ig")
1). 何时: 如果正则表达式需要在程序内动态生成,就只能用new创建!
2). 因为: //之中不能写js表达式或语句,只有""才能用js任意生成!
(2). 正则表达式对象提供的函数:
a. 验证格式:
1). var bool=正则表达式.test(要检查的字符串)
2). 原理: 用正则表达式检查指定字符串,如果字符串格式符合正则表达式要求,就返回true,否则如果字符串格式不符合正则表达式要求,就返回false
因为test()函数的返回值本来就是bool类型,所以可直接用做判断条件
3). 坑: test()函数默认只要在字符串中找到部分内容和正则匹配,就返回true!而不是要求从头到尾必须完整匹配!
4). 解决: 只要验证格式,正则中必须前加^,后加$,表示从头到尾必须完整匹配的意思!
b. 既查找每个敏感词的内容,又查找每个敏感词的位置
1). var arr=正则表达式.exec(可能包含敏感词的字符串)
2). 强调: 要想exec能找所有,正则后必须加g
3). 原理: 从当前位置开始,查找下一个符合正则表达式要求的敏感词的位置和内容。
4). 返回值: exec()每次查找返回的结果和match不加g时返回的结果数组结构完全相同:
arr=[
"0":"本次敏感词的内容",
"index":"本次敏感词的位置"
]
5). vs match(): 反复调用:
i. match()的问题: 永远只能从开头位置开始找第一个敏感词。无法继续找第二个敏感词。
ii. exec()反复调用,自己就会找下一个!直到找不到,返回null!
原理: 看视频10_exec
总结:
1. 查找敏感词:
(1). 查找一个固定的敏感词的位置:
var i=str.indexOf("敏感词",fromi)
(2). 用正则模糊查找一个敏感词的位置:
var i=str.search(/正则/i)
(3). 获得敏感词的内容:
a. 获得一个敏感词的内容和位置:
var arr=str.match(/正则/i)
b. 获得所有敏感词的内容:
var arr=str.match(/正则/ig) //g global 全部
(4). 获得每个敏感词的内容和位置:
reg.exec()
2. 替换敏感词:
(1). 简单替换: 将所有敏感词都替换为一个统一的新值
str=str.replace(/正则/ig,"新值")
(2). 高级替换: 根据敏感词的不同,动态选择不同的新值替换
str=str.replace(/正则/ig, function(kw){
return 根据kw值得不同,动态生成不同的新值
})
(3). 删除敏感词: 其实就是替换为""
3. 切割字符串
(1). 简单切割: 切割符是固定的
var arr=str.split("切割符")
(2). 高级切割: 切割符是不固定的,但是有规律
var arr=str.split(/正则/)
(3). 打散字符串为字符数组:
var arr=str.split("")
4. 去掉开头和结尾的空字符:
(1). 只去开头的空字符: str.trimLeft()
(2). 只去结尾的空字符: str.trimRight()
(3). 同时去掉开头和结尾的空字符: str.trim()
JS高级day02
最新推荐文章于 2023-02-20 20:27:19 发布