kmust-city

  好久没写了,复习一下自己学过的内容: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()

至于最后这个解决方法,下次细说。

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2021-12-20
  • 2022-12-23
  • 2021-05-14
  • 2022-01-19
猜你喜欢
  • 2021-11-15
  • 2021-12-10
  • 2022-12-23
  • 2022-01-21
  • 2021-09-09
  • 2021-12-03
  • 2021-06-08
相关资源
相似解决方案