好久没写了,复习一下自己学过的内容:String家的match函数配合正则查找敏感词
写法:var arr = str.match(/正则/i) 意为:查找第一个敏感词出现的内容和位置
返回值:如果找到,返回一个数组;否则,返回null。
强调: 将来如果一个函数有可能返回null时,在使用这个函数的返回值之前,都必须先判断返回值是不是null,再决定如何使用返回值!必须为null的情况提供备选方案,保证程序在任何情况下都不会报错!
数组结构:arr : [ "0": "关键词内容", "index":"关键词的下标位置i" ],观察可看出,数组为关联数组。
注:0和index禁止改名!因为match()是内置的函数,返回的结果格式也是固定的!不是人为可以修改的!所以我们只能遵照match()的要求使用!
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <script> var msg = prompt('Enter a paragraph'); //在消息内容中查找符合正则表达式要求的敏感词的内容和位置 var arr = msg.match(/([我卧]|wo)\s*([艹槽草操]|cao)/i); console.log(arr); if (arr != null) { document.write(`<h1 style="color:red">在位置${arr.index}发现敏感词${arr[0]},禁止发送</h1>`); } else { document.write(`<h1 style="color:green">输入的内容为:${msg}</h1>`) } </script> </body> </html>
运行效果:
问题:js中的正则表达式只要找到第一个符合要求的敏感词就下班了!不再继续往后找!
解决:在正则表达式第二个/后加g,意为global,全部。但是match()一旦加上g之后,虽然可以返回所有关键词的内容,但是无法返回每个关键词的位置了!
示例代码:
<script>
var str="老师:请用小红 我的 朋友造句。小亮:小红是我的朋友。小然:朋友!小红是我的!"; //用正则表达式找出str中*所有*以小字开头的人名 var arr=str.match(/小[\u4e00-\u9fa5]/g); console.log(arr); </script>
运行效果:
既查找每个敏感词的内容,又查找每个敏感词的位置:String家的函数,无法实现如此复杂的查找功能。
解决:只能依靠reg.exec()
至于最后这个解决方法,下次细说。