javaScript 蓝桥杯----梅楼封的一天
目录
- 一、介绍
- 二、目标
- 1.函数入参要求:
- 2.出参要求:
- 三、输出示例
- 1.示例一
- 2.示例二
- 3.示例三
- 4.示例四
- 5.示例五
- 四、待完善代码
- 五、知识点
- 1.正则表达式
- 2.split方法
- 3.test方法
- 4.match方法
- 5.matchAll方法
- 6.slice方法
- 7.replace() 方法
- 8.repeat方法
- 六、答案
一、介绍
抖音"封神榜"大家可都知道?大名鼎鼎的梅楼封是抖音玩家最害怕的人物,在抖音玩家中,谁都不想在封神榜中留名,玩家只要说话违规,那么就有可能入住封神榜,然后各种悲催的日子就来了,想要不被梅楼封关注,就要学会说话的套路,避免被封杀。
今天我们来到蓝桥云课,在这里让你体验一把梅楼封的权利,炫耀一下自己,杀杀不遵守规则玩家的锐气。好了,废话不多说,现在就带你坐镇蓝桥云课,体验梅楼封的一天!
二、目标
玩家说话没技巧,让你感到很愤怒,要求封装一个方法,将该玩家封杀:
1.函数入参要求:
第一个参数为字符串(任意字符串)。
第二个参数为脱敏规则,可以是字符串,也可以是数组。
第三个参数是字符串,表示用什么来占位脱敏文字(默认为:*)。
第四个参数是:是否将手机号(11 位数字)进行脱敏,默认为 true(规则是:保留前三位和后三位,中间脱敏占位)。
// 函数传递参数,输出 {ids: [1], newStr: '开*每一天'}
toDesensitization("开心每一天", ["心"], "*", false);
2.出参要求:
- 第一个参数不存在返回 null。
- 第一个参数存在,第二个参数不存在,返回原字符串。
- 第一个参数和第二个参数都存在,返回脱敏后的新字符串以及被脱敏的文本位置,返回格式是一个对象( 注意:无论手机号是否脱敏处理,都不会返回手机号的被脱敏时的位置 ),格式如下:
{"ids": [],"newStr": ""
}
三、输出示例
1.示例一
输入内容
人的一生,好不好只有自己知道,乐不乐只有自己明白。快乐是一种心情,一种自然、积极向上的心态。在平凡之中寻求快乐,在磨难之中寻求快乐,在曲折之中需求快乐。
规则为:“向上”
脱敏占位符为: “*”
输出返回
{"ids": [40],"newStr": "人的一生,好不好只有自己知道,乐不乐只有自己明白。快乐是一种心情,一种自然、积极**的心态。在平凡之中寻求快乐,在磨难之中寻求快乐,在曲折之中需求快乐。"
}
2.示例二
输入内容
不论这个世界多么糟糕,你的世界一定要精彩;不论人心多么黑暗,你的内心一定要明亮。不要用糟糕去对付糟糕,不要用黑暗去对付黑暗。心里充满阳光,世界就光明无比;心里充满感恩,世界因此灿烂。请记住:你的付出决定你的未来,你的汗水记得你的成就,你的态度决定你的一切.
规则为:[‘糟糕’,‘记得’, ‘定’]
脱敏占位符为: *
输出返回:
{"ids": [8, 43, 48, 110, 16, 35, 100, 122],"newStr": "不论这个世界多么**,你的世界一*要精彩;不论人心多么黑暗,你的内心一*要明亮。不要用**去对付**,不要用黑暗去对付黑暗。心里充满阳光,世界就光明无比;心里充满感恩,世界因此灿烂。请记住:你的付出决*你的未来,你的汗水**你的成就,你的态度决*你的一切。"
}
3.示例三
输入内容
今天有人宣传要手机号等个人信息,可是骚扰电话太多了,不想泄漏隐私,哎,想来是熟人,没办法,我的手机号是 15698254321,你一定要记好了。
规则为:[‘宣传’,‘骚扰’,‘私’]
脱敏占位符为: *
是否脱敏手机号:true
输出返回:
{"ids": [4,18,31],"newStr": "今天有人**要手机号等个人信息,可是**电话太多了,不想泄漏隐*,哎,想来是熟人,没办法,我的手机号是 156*****321,你一定要记好了。"
}
4.示例四
输入内容
来好吗!怎样一向不打电话给我啊。知道吗?我还是我,但号码已经换成了 15273773888,多联络啊。
规则为:‘号码’
脱敏占位符为: *
是否脱敏手机号:true
输出返回:
{"ids": [26],"newStr": "来好吗!怎样一向不打电话给我啊。知道吗?我还是我,但**已经换成了 152*****888,多联络啊。"
}
5.示例五
输入内容
uofjjflsjhahf废旧塑料ffjsljfs
规则为:‘jj’
输出返回:
{"ids": [3],"newStr": "uof**flsjhahf废旧塑料ffjsljfs"
}
四、待完善代码
/*** @description:* @param {*} str* @param {*} rule* @param {*} symbol* @param {*} dealPhone* @return {*}*/const toDesensitization = (str, rule, symbol = '*', dealPhone = true) => {}
五、知识点
1.正则表达式
-
两种写法
- const reg =/正则表达式内容/参数
- const reg=newReg(‘正则表达式内容’,''参数")
-
参数:
- g :表示全局(global)模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时立即停止;
- i :表示不区分大小写(case-insensitive)模式,即在确定匹配项时忽略模式与字符串的大小写;
- m :表示多行(multiline)模式,即在到达一行文本末尾时还会继续查找下一行中是否存在与模式匹配的项。
2.split方法
String split() 方法
- str.split() 方法将字符串拆分为子字符串数组。
- split() 方法返回新数组,不会更改原始字符串。
- 如果 (" ") 用作分隔符,则字符串在单词之间进行拆分
3.test方法
RegExp test() 方法
- reg.test() 方法测试字符串中的匹配项。
- 如果找到匹配项,则返回 true,否则返回 false。
4.match方法
String match() 方法
- str.match() 方法将字符串与正则表达式进行匹配。
- match() 方法返回包含匹配项的数组。
- 如果未找到匹配项,则 match() 方法返回 null。
- 如果找到了匹配项,则返回
['匹配文本'//该数组的第 0 个元素存放的是匹配文本index: 3,//index 属性声明的是匹配文本的起始字符在 string 中的位置input: 'uofjjflsjhahf废旧塑料ffjsljfs',//input 属性声明的是对 string 的引用。
]
以上说明适用于非全局匹配的正则表达式
如果 regexp 具有标志 g,则 match() 方法将执行全局检索,找到 string 中的所有匹配子字符串。若没有找到任何匹配的子串,则返回 null。如果找到了一个或多个匹配子串,则返回一个数组。不过全局匹配返回的数组的内容与前者大不相同,它的数组元素中存放的是 string 中所有的匹配子串,而且也没有 index 属性或 input 属性。
5.matchAll方法
String match() 方法
- 那么当我们需要全局匹配且需要获取index和input属性怎么办?可以使用mathchAll方法。
- matchAll() 方法返回一个包含所有匹配正则表达式的结果及其分组捕获组的迭代器
- 返回值:一个迭代器,可以使用for…of…,数组新增的扩展符(…)或Array.from()实现功能
注意:需要在正则表达式中写明全局匹配(g)否则会报错,以及注意要将返回值转化为数组
6.slice方法
Array slice() 方法
- slice() 方法以新的数组对象,返回数组中被选中的元素。
- slice() 方法选择从给定的 start 参数开始的元素,并在给定的 end 参数处结束,但不包括。(左闭右开)
注释:slice() 方法不会改变原始数组。
7.replace() 方法
String replace() 方法
- replace() 方法在字符串中搜索值或正则表达式。
- replace() 方法返回已替换值的新字符串。
- eplace() 方法不会更改原始字符串。
如果您替换值,则只会替换第一个实例。如需替换所有实例,请使用带有 g 修饰符集的正则表达式。
8.repeat方法
String repeat(count) 方法
str.repeat()方法示例:
let str ='*'
str=str.repeat(2)
console.log(str)//输出 **
- count:重复次数
- 不会改变原对象
六、答案
const toDesensitization = (str, rule, symbol = '*', dealPhone = true) => {//题目要求返回的数据格式let results = {ids: [],newStr: str,}//第一个参数不存在返回 null。if (!str) {return null}//第一个参数存在,第二个参数不存在,返回原字符串。if (str && !rule) return str//如果输入的是字符串类型的 那么将其转换为数组if (typeof rule === 'string') {//根据逗号分割字符串rule = rule.split(',')}//for of 循环遍历数组 取的是valuefor (let item of rule) {//正则表达式 全局匹配let reg = new RegExp(`${item}`, 'g')if (reg.test(str)) {//获取所有匹配的索引 将他们添加到ids[...str.matchAll(reg)].forEach((item) => {results.ids.push(item.index)})//注意:如果reg没有选择全局匹配 那么调用matchAll会报错//本来replace方法只能替换第一个匹配的字符串,但是如果正则表达式中设置了全局标志g,那么replace方法就会替换所有匹配的子字符串。results.newStr = results.newStr.replace(reg, symbol.repeat(item.length))}}if (dealPhone) {//手机号替换const reg = /1\d{10}/if (reg.test(str)) {let temp = str.match(reg)[0]temp = temp.slice(3, -3)results.newStr = results.newStr.replace(temp, symbol.repeat(temp.length))}}return results
}
相关文章:
javaScript 蓝桥杯----梅楼封的一天
目录一、介绍二、目标1.函数入参要求:2.出参要求:三、输出示例1.示例一2.示例二3.示例三4.示例四5.示例五四、待完善代码五、知识点1.正则表达式2.split方法3.test方法4.match方法5.matchAll方法6.slice方法7.replace() 方法8.repeat方法六、答案一、介绍…...

谷粒商城笔记+踩坑(18)——购物车
目录 一、环境搭建 1.1、购物车模块初始化 1.2、动静资源处理 1.3、页面跳转配置 二、数据模型分析 2.1、购物车需求 2.1.1、离线购物车和在线购物车需求、数据库选择redis 2.1.2、购物车数据结构 2.2、模型类抽取,Cart和CartItem 2.3、Redis依赖和配置、…...

进阶C语言:指针笔试题
在学习完进阶C指针之后,可以来做一些笔试题来进行提升、巩固,小编在这里给大家分享几道比较有意思的笔试题 目录 一、笔试题1: 二、笔试题2 三、笔试题3: 四、笔试题4: 五、笔试题5: 编辑 六、笔试题…...

基于SSM(jsp)的宿舍管理系统
带项目源码和数据库文件 MySQL 导入即可用 可作为毕设参考 框架:SSM 1.1功能需求 本系统的设计目的是为了让老师可以随时随地的关注学生的在校情情况,方便老师对学生在校情况的添加、修改、删除和查询,实时关注学生的安全问题。该系统能…...
Java Web应用开发——作业四
一.单项选择题(共3题,30.0分) 1 如何获取一个 Cookie[]( ) A、 request.getCookies() B、 request.getCookie() C、 response.getCookies() D、 response.getCookie() 正确答案: A 2 ( )隐…...

基于ASP的反垃圾邮件管理系统的设计与实现
随着Internet的迅速普及,电子邮件以其快捷、方便、低成本的特点逐渐成为人们进行信息交流的主要媒介之一,但是随之而来的垃圾邮件也越来越泛滥。垃圾邮件占用了有限的存储、计算和网络资源,耗费了用户大量的处理时间,影响和干扰了…...

2010年9月计算机二级JAVA笔试试题及答案
一、选择题(每小题2分,共70分) 下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的。请将正确选项填涂在答题卡相应位置上,答在试卷上不得分。 (1&…...

博客让谷歌或是百度收录
参考以下大佬的博客教程 Hexo框架(六):SEO优化及站点被搜索引擎收录设置 | 你真是一个美好的人类 第一步 安装百度和 Google 的站点地图生成插件: npm install hexo-generator-baidu-sitemap --save npm install hexo-generator-sitemap --save 然后来…...

机器学习分类算法评价指标
一. 分类评价指标 对机器学习算法的性能进行评估时,不仅需要有效可行的实验估计方法,还需要有衡量模型泛化能力的评价指标,这就是算法评价指标。分类算法的评价指标一般有准确率,精确率,召回率,F1-score&a…...

Socks5代理服务器示例详解
Go语言中变量的声明和JavaScript很像,使用var关键字,变量的声明、定义有好几种形式 变量和常量 // 声明并初始化一个变量 var m int 10 // 声明初始化多个变量 var i, j, k 1, 2, 3 // 多个变量的声明(注意小括号的使用) var(no intname string ) //…...
使用 Docker 和 Nginx 反向代理访问 ChatGPT API
在许多应用程序中,我们需要从一个外部服务中获取数据。然而,由于种种原因(例如跨域问题、API 访问限制等),我们可能无法直接从客户端访问这些服务。这时,反向代理可以成为我们的救星。在这篇文章中…...
[前端笔记038]vue2之vueRouter、elementUI
前言 本笔记参考视频,尚硅谷:BV1Zy4y1K7SH p117 - p135 相关理解 vue 的一个插件库,专门用来实现SPA 应用单页 Web 应用(single page web application,SPA),整个应用只有一个完整的页面点击页面中的导航…...
ChatGPT使用案例之操作Excel
ChatGPT使用案例之操作Excel 微软已经通过其官网宣布,正在将其基于GPT-4的人工智能(AI)技术植入到其Office办公软件当中,该功能名为“Microsoft 365 Copilot”。微软称其是基于大语言模型的下一代AI生产力技术,目前已经向部分商业用户开放。 Microsoft 365 负责人Jared …...

【算法基础】(二)数据结构 --- 单链表
✨个人主页:bit me ✨当前专栏:算法基础 🔥专栏简介:该专栏主要更新一些基础算法题,有参加蓝桥杯等算法题竞赛或者正在刷题的铁汁们可以关注一下,互相监督打卡学习 🌹 🌹 dz…...
STL容器之<multiset>
文章目录测试环境multiset介绍头文件模块类定义对象构造初始化元素访问元素插入和删除元素查找容器大小迭代器其他函数测试环境 系统:ubuntu 22.04.2 LTS 64位 gcc版本:11.3.0 编辑器:vsCode 1.76.2 multiset介绍 关联式容器。元素是唯一的…...
python实战应用讲解-【numpy专题篇】numpy常见函数使用示例(三)(附python示例代码)
目录 Python numpy.finfo()函数 Python Numpy MaskedArray.masked_less()函数 Python Numpy MaskedArray.masked_less_equal()函数 Python Numpy MaskedArray.masked_not_equal()函数 Python Numpy MaskedArray masked_outside()函数 Python Numpy MaskedArray.masked_wh…...
【Android笔记89】Android之全局加载框Gloading的使用
这篇文章,主要介绍Android之全局加载框Gloading的使用。 目录 一、Gloading全局加载框 1.1、Gloading介绍 1.2、Gloading运行效果 1.3、Gloading的使用...

php微信小程序java+Vue高校课程课后辅导在线教育系统nodejs+python
目 录 1绪论 1 1.1项目研究的背景 1 1.2开发意义 1 1.3项目研究现状及内容 5 1.4论文结构 5 2开发技术介绍 7 2.1 B/S架构 7 2.2 MySQL 介绍 7 2.3 MySQL环境配置 7 2.5微信小程序技术 8 3系统分析 9 3.1可行性分析 9 3.1.1技术可行性 9 3.1.2经济可行性 9 3.1.3操作可行性 10 …...

公司刚来的00后真卷,上班还没2年,跳到我们公司起薪20k....
都说00后躺平了,但是有一说一,该卷的还是卷。 这不,前段时间我们公司来了个00后,工作都没两年,跳槽到我们公司起薪18K,都快接近我了。后来才知道人家是个卷王,从早干到晚就差搬张床到工位睡觉了…...

Intel 处理器 macOS降级到Big Sur
1 创建可引导的 macOS 安装器 将移动硬盘作安装 Mac 操作系统的启动磁盘。 创建可引导安装器需要满足的条件 移动硬盘(格式化为 Mac OS 扩展格式),至少有 14GB 可用空间已下载 macOS Big Sur的安装器 2 下载 macOS macOS Big Sur安装器会…...

Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...

Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...

Linux中《基础IO》详细介绍
目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...

6.9-QT模拟计算器
源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...
手动给中文分词和 直接用神经网络RNN做有什么区别
手动分词和基于神经网络(如 RNN)的自动分词在原理、实现方式和效果上有显著差异,以下是核心对比: 1. 实现原理对比 对比维度手动分词(规则 / 词典驱动)神经网络 RNN 分词(数据驱动)…...