部分常用正则表达式
正则规则就是要找关键字正文
1.如果一种规则中一位字符上有多种备选使用 []
2.如果[]中备选字符是连续的可以使用 - 连接首尾,省略中间的内容
[a-z]:匹配一位小写字母
[A-Z]:匹配一位大写字母
[a-zA-Z]:匹配一位字母不区分大小写
[\u4e00-\u9fa5]:匹配一位汉字
3.预定义字符集:针对4种常用[]的情况提供更简化的方法
\d 一位数字 [0-9]
\w 一位字母数字或下划线都行[0-9A-Za-z_]
\s 一位空字符,空格,tab,换行等
. 通配符点,匹配任意字符
3.规定一个字符集出现的次数,可以用量词
a.有明确的数量边界
{n} 必须出现n次
{n,m} 至少出现n个,最多m个
{n,} 至少出现n个,多了不限
b.没有明确数量边界的量词
* 可有可无,多了不限
? 可有可无,最多一个
+ 至少一个,多了不限
4.存在两种匹配规则,二选一 规则1 | 规则2
5.希望先匹配某些子规则,在和其他规则匹配:(子规则)
6.匹配特殊位置
^ 匹配紧挨着开头的关键词
$ 匹配紧挨着结尾的关键词
\b规则 匹配边界之后的一个关键词
规则\b 匹配边界之前的一个关键词
String正则相关的函数
1.查询字符串
(1)查找一个固定不变的敏感词出现的位置
var i=str.indexOf('敏感词',fromi)
在字符串str中从fromi的位置开始向后查找,可以不写,默认是从0位置开始查找,返回第一个符合条件的敏感词的下标;找不到返回-1
注意:不支持正则表达式,只能查找一种固定不变的敏感词
(2)用正则表达式模糊查找多种敏感词出现的位置
var i=str.search(/正则表达式/i);
查找符合正则表达式要求的敏感词的下标,查找到,则返回敏感词第一个字所在下标位置,没找到,返回-1;
js的正则中默认区分大小写,加上i表示忽略大小写(ignore)
注意只获得敏感词下标位置,无法获得敏感词内容
(3)获得敏感词的下标和内容(只查找第一个)
var arr=str.match(/正则/i)
在字符串中查找第一个符合要求的敏感词的下标和内容,并放在数组中返回;查找不到返回null
arr:["0":"敏感词内容",“index”:"敏感词下标"]
注意:match查找所有敏感词时,是无法获取下标的
强调:如果将来一个函数可能返回null,就必须先验证结果不是null,才能正常使用。如果结果是null,必须提供备选方案。
(4). 既查找所有敏感词的内容,又获得每个敏感词的位置
Reg对象提供了reg.exec()函数
2.替换敏感词
(1).简单替换:将所有敏感词都替换为统一的新值
str=str.repalce(/正则/g,"新值")
查找字符串str中所有符合要求的敏感词,并统一替换为指定的"新值"。 g,表示全局查找
str=str.replace(/正则/ig, "")
将敏感词替换成“”,可以理解成删除敏感词
(2).高级替换:根据每个敏感词的不同,动态选择不同的新值替换
a. str=str.replace(
/正则/ig,
function(keyword){ //replace每找到一个敏感词就自动调用一次回调函数
//keyword:自动接收到本次找到的敏感词内容-信任
return根据本次找到的不同敏感词keyword不同,动态选择不同的新值
}//replace会将回调函数返回的新值,替换到字符串中敏感词的位置
)
3.切割字符串
(1).简单切割:按一个固定的切割符号,将字符串切割为多段子字符串
var arr=str.split("切割符")
在切割之后的结果中,不再包含切割符
将字符串打散为字符数组: 按""切割 var arr=str.split("")
(2)复杂切割: 切割符不是固定的,可能很多种
var arr=str.split(/正则/)
用str中所有符合正则要求的敏感词当做切割符,切割字符串
split中的正则不加g,照样可以找所有敏感词
RegExp对象
在js程序中专门保存一条正则表达式的对象,js语言不认识正则表达式语法。所以,才需要一种专门的对象
1.创建方式
(1).用//创建: (首选)
var reg=/正则/ig
(2).用new创建:
var reg=new RegExp("正则表达式" , "ig")
如果正则表达式不是固定的,可能根据其他变量的值动态生成正则表达式,就只能用new来创建。因为new RegExp()的参数是字符串,而js中有办法动态拼接出我们想要的任何字符串
2. RegExp对象提供的函数: 2个函数:
(1).验证字符串的格式:
var bool=正则表达式对象.test(要检查的字符串)
用test前的正则表达式,检查()中的字符串是否符合格式要求,如果()中的字符串符合test前的正则表达式的要求,则返回true,如果()中的字符串不符合test前的正则表达式的要求,则返回false
验证格式,都要同时前加^,后加$,表示从头到尾必须完整匹配
(2)既查找每个敏感词的内容,又查找每个敏感词的位置
var arr=正则表达式.exec(可能包含敏感词的字符串)
如果希望exec()可以继续找下一个敏感词,最终找到所有敏感词,则正则表达式必须加g
表示 用正则表达式在可能包含敏感词的字符串中查找下一个敏感词的内容和位置
每执行一次exec()也只能找一个敏感词——同match()不加时相同
用循环反复调用exec(),exec()函数自动知道要找下一个敏感词
找到了敏感词,就返回一个数组:同match()不加g的情况: arr:[0:"本次找到的敏感词内容", index:本次找到的敏感词位置 ,如果本次调用函数时,没找到敏感词,就返回null