• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
还不是因为你太菜
博客园    首页    新随笔    联系   管理    订阅  订阅
正则练习(match)

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

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

posted on 2020-09-30 18:07  叶倾柔  阅读(118)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3