正则表达式:专门用来描述字符串中字符出现规则的表达式。
简写:
匹配一位小写字母:[a-z],共26个。
匹配一位大写字母:[A-Z],共26个。
要匹配一位字母:[A-Za-z],共52个。
要匹配一位字母或数字:[0-9A-Za-z],共62个。
要匹配一位汉字:[\u4e00-\u9fa5]。

预定义字符集:
正则表达式为四种最常用的字符集定义了最简化写法,称为预定义字符集。
包括:
要匹配一位数字:\d 等效于 [0-9]
要匹配一位字母、数字或_:\w 等效于 [0-9A-Za-z_]
要匹配一位空字符:\s 可匹配 空格、制表符Tab等空白
要匹配所有文字(通配符):.
匹配手机号规则简写为:1[3-8]\d\d\d\d\d\d\d\d\d
数量词:紧跟在修饰的字符集之后,默认修饰相邻的前一个字符集
比如:手机号中连续出现的9个数字\d,可简写为:
1[3-8]\d{9}
指定匹配位置:
比如:匹配一组连续的空字符
1、匹配任意一组连续的空字符:\s+
2、仅匹配开头的空字符:^\s+
3、仅匹配结尾的空字符:\s+$
4、同时匹配开头和结尾的空字符:^\s+|\s+$
使用indexOf查找敏感词的位置
var i=str.indexOf("要找的敏感词")
返回值:
1). 如果找到敏感词,返回"敏感词"第一个字在字符串中所在位置的下标
2). 如果找不到,返回-1
案例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
// indexOf查找敏感词
// 请用户输入一条消息
var msg = prompt('请输入消息内容');
var i = msg.indexOf('我草');
// 如果找到,返回我草在字符串中的下标位置
// 如果没找到,返回-1
// 返回值不是-1,说明找到了敏感词
if(i != -1){
document.write(`<h1 style="color:red">发现敏感词,禁止发送</h1>`)
}else{
document.write(`</h1>${msg}</h1>`)
}
</script>
</body>
</html>
用正则表达式模糊查找多种敏感词的出现的位置:
var i=str.search(/正则/i)
查找聊天记录中微信敏感词及其变种:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
// search查找敏感词
// 请用户输入一条消息
var msg = prompt('请输入消息内容');
// 微信的正则:
// 第一个字:微或wei,其中ei可有可无,最多一次——(微|w(ei)?)
// 第一个字和第二个字之间可能有或者没有不确定数量的空字符——\s*
// 第二个字:信或xin,其中in可有可无,最多一次——(信|x(in)?)
var i = msg.search(/(微|w(ei)?)\s*(信|x(in)?)/i);
if(i != -1){
document.write(`<h1 style="color:red">发现敏感词,禁止发送</h1>`)
}else{
document.write(`</h1>${msg}</h1>`)
}
</script>
</body>
</html>
缺点:使用search查找无法知道查找的敏感词内容
使用match查找敏感词的位置和内容
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
// match查找敏感词
// 请用户输入一条消息
var msg = prompt('请输入消息内容');
// 微信的正则:
// 第一个字:微或wei,其中ei可有可无,最多一次——(微|w(ei)?)
// 第一个字和第二个字之间可能有或者没有不确定数量的空字符——\s*
// 第二个字:信或xin,其中in可有可无,最多一次——(信|x(in)?)
var arr = msg.match(/(微|w(ei)?)\s*(信|x(in)?)/i);
if(arr != null){
document.write(`<h1 style="color:red">在位置${arr['index']}处发现敏感词${arr[0]},禁止发送</h1>`)
}else{
document.write(`</h1>${msg}</h1>`)
}
</script>
</body>
</html>
正则表达式默认只匹配一个关键词,如果找到,就不再继续查找。
解决办法:在/后加g,表示全局匹配。
问题:如果match加g,就只能返回敏感词的内容,无法返回位置了。
如果没找到,返回null。




