实现同时查找多个关键词——KeywordCrafter - 关键词匠心

具体功能:同时查找多个关键词,高亮加粗显示,并关键词显示出现次数。

🧐碎碎念:最近在写文案的时候,总是要避免出现一个敏感词汇,利用 (command+F) or (Ctr+F) 查找,只能一个一个单词去查,很麻烦。🤷‍♂️

所以我写了一个简单的网页,在文本框输入一整篇文章,在搜索框输入我想要查找的关键词,多个关键词用逗号 (,) 分隔开,并且统计该关键词出现次数。下面是效果图:

 接下来我们具体实现一下。

(emm……本人对前端不是很了解,下面代码仅限实现我自己的需求👩‍💻)

一、功能实现

1. html 网页具体代码:

<html><head><title>KeywordCrafter - 关键词匠心</title>
<body><div class="mm"><h1 style="text-align: center;">KeywordCrafter - 关键词匠心</h1><textarea id="article" placeholder="请输入文本内容"></textarea><br><input type="text" id="words" style="width: 30%;height: 23px; font-size: 14px;" placeholder="输入要搜索的单词(以逗号分隔)"><button onclick="searchWords()"><span class="search-icon"></span></button><div id="wordCounts"></div><div id="result"></div></div>
</body></html>

2. JavaScript部分:

<script>function searchWords() {const articleContent = document.getElementById("article").value.toLowerCase();const wordsToSearch = document.getElementById("words").value.toLowerCase().split(',');let foundWords = {};for (const word of wordsToSearch) {const count = (articleContent.match(new RegExp(word.trim(), 'gi')) || []).length;if (count > 0) {foundWords[word.trim()] = count;}}displayResult(foundWords);}// 显示筛选后的文本function displayResult(foundWords) {const articleContent = document.getElementById("article").value;const resultDiv = document.getElementById("result");const wordCountsDiv = document.getElementById("wordCounts");let highlightedContent = articleContent;if (Object.keys(foundWords).length > 0) {highlightedContent = highlightWords(articleContent, Object.keys(foundWords));let wordCountsText = "关键词 & 出现次数: ";for (const word in foundWords) {wordCountsText += `${word} (${foundWords[word]} 次),`;}wordCountsDiv.innerText = wordCountsText;} else {wordCountsDiv.innerText = "没有发现关键词。";}resultDiv.innerHTML = highlightedContent;}// 筛选到的文本高亮加粗显示function highlightWords(content, words) {for (const word of words) {const regex = new RegExp(word, "gi");content = content.replace(regex, `<span class="highlight">${word}</span>`);}return content;}</script>

3. 网页样式:

<style>body {background-image: url("./images/bg1.jpeg");background-size: cover;/* 控制图片如何适应元素 */background-repeat: no-repeat;/* 防止图片重复平铺 */}input[type="text"],textarea {background-color: #f2f2f23e;/* 自定义背景颜色 */border: 1px solid rgba(204, 204, 204, 0.258);/* 边框样式 */padding: 10px;/* 内边距 */color: #333;/* 文本颜色 */}button {background-color: #007bff23;/* 按钮背景颜色 */color: white;/* 按钮文本颜色 */padding: 10px 20px;/* 内边距 */border: none;/* 去除边框 */cursor: pointer;/* 鼠标悬停样式 */}.highlight {background-color: yellow;font-weight: bold;}.mm {margin: 0 20px;/* background-image:url("./images/bg1.jpeg") *//* background-image:url("./images/bg2.jpeg") */}textarea {font-size: 16px;width: 100%;height: 42vh;align: center;text-size-adjust: 14px;padding: 5px;}#wordCounts {margin: 5px;color: blueviolet;}button .search-icon {display: inline-block;width: 20px;height: 20px;background-image: url('./images/ss.png');/* 图标的 URL */background-repeat: no-repeat;background-size: 100%;vertical-align: middle;/* 垂直居中 */margin-right: 5px;/* 图标和文字之间的间距 */}</style>

大家可以自己添加替换背景图片。

二、代码解析

(一)实现过程

主要通过JavaScript实现了同时查找多个关键词的功能。让我来解释一下具体的实现过程:

  1. 页面结构:

    • 使用<div class="mm">创建一个具有特定样式的区块,其中包含了页面元素。
    • <h1>标签显示了页面的标题,且使用了text-align: center;来将标题居中显示。
    • <textarea>标签创建了一个文本输入框,用户可以在这里输入要搜索的文章内容。
    • <input>标签用于输入要搜索的关键词,设置了样式以调整宽度、高度和字体大小。
    • <button>标签添加了一个按钮,点击按钮会触发searchWords()函数。
    • 两个<div>标签用于显示搜索结果和关键词出现次数。
  2. JavaScript功能:

    • searchWords()函数会在用户点击搜索按钮时触发。它会获取文本框中的文章内容和要搜索的关键词。
    • 对于每个关键词,使用正则表达式在文章内容中查找匹配,并统计关键词出现的次数。
    • 所有搜索到的关键词和出现次数会被保存在foundWords对象中。
  3. 显示结果:

    • displayResult()函数将搜索结果显示在页面上。如果有搜索到的关键词,它会高亮显示出现在文章内容中的关键词,并在旁边显示关键词出现的次数。
    • 如果没有搜索到关键词,将显示一个相应的提示信息。
  4. 高亮显示:

    • highlightWords()函数用于将文章内容中的关键词进行高亮显示。它通过正则表达式匹配关键词,并将匹配到的关键词用<span class="highlight">标签包裹起来,从而实现高亮效果。

通过JavaScript实现了在文本内容中同时查找多个关键词,并将匹配到的关键词高亮显示以及统计关键词出现次数的功能。同时,HTML和CSS也被用于创建网页结构和样式。

(二)正则表达式

当调用searchWords()函数时,这段代码利用了正则表达式和循环,逐个查找关键词在文章中的出现次数,并将结果存储在一个对象中,用于后续的显示和统计。

  1. 获取输入内容:const articleContent = document.getElementById("article").value.toLowerCase();

    • 这行代码获取了输入在id为"article"的文本框中的文章内容,并将内容转换为小写字母,方便后续的比较。
  2. 获取关键词:const wordsToSearch = document.getElementById("words").value.toLowerCase().split(',');

    • 这行代码获取了输入在id为"words"的文本框中的关键词,并将关键词以逗号为分隔符拆分成一个数组。
    • 之后,将每个关键词转换为小写字母,以便进行不区分大小写的匹配。
  3. 创建一个空对象来存储找到的关键词和出现次数:let foundWords = {};

  4. 遍历每个关键词并执行查找:

    for (const word of wordsToSearch) {const count = (articleContent.match(new RegExp(word.trim(), 'gi')) || []).length;if (count > 0) {foundWords[word.trim()] = count;}
    }
    
    • 在这个循环中,每个关键词都经过如下处理:
      • 使用new RegExp(word.trim(), 'gi')创建一个正则表达式对象,word.trim()用于去除关键词前后的空格。
      • 'gi'表示正则表达式会在全局范围内进行匹配(g:global)且不区分大小写(i:case-insensitive)。
      • (articleContent.match(...) || []).length会匹配所有在articleContent中的关键词,并返回匹配数组。
      • .length获取匹配数组的长度,即关键词在文章中出现的次数。
  5. 如果关键词出现次数大于0,则将关键词及其出现次数存储在foundWords对象中。

  6. 最后,调用displayResult(foundWords)函数来显示搜索结果。

以上就是全部内容了,希望能帮到你。主页有其他文章,可以看看哦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/89616.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中国艺术孙溟㠭篆刻作品《得大自在》

关汉卿《四块玉闲适》&#xff1a;“适意行&#xff0c;安心坐。渴时饮&#xff0c;饥时餐&#xff0c;醉时歌。困来时就向莎茵卧。日月长&#xff0c;天地阔&#xff0c;闲快活。” 整理/释门

JS逆向系列之猿人学爬虫第14题-备而后动-勿使有变

文章目录 题目地址参数分析参考jspython 调用往期逆向文章推荐题目地址 https://match.yuanrenxue.cn/match/14题目难度标的是困难,主要难在js混淆部分。 参数分析 初始抓包有无限debugger反调试,可以直接hook 函数构造器过掉无限debugger Function.prototype.__construc…

[FPAG开发]使用Vivado创建第一个程序

1 打开Vivado软件&#xff0c;新建项目 选择一个纯英文路径 选择合适的型号 产品型号ZYNQ-7010xc7z010clg400-1ZYNQ-7020xc7z010clg400-2 如果型号选错&#xff0c;可以单击这里重新选择 2 创建工程源文件 可以看到文件创建成功 双击文件打开&#xff0c;插入代码 modul…

IOC容器

DI&#xff08;依赖注入&#xff09;&#xff1a;DI&#xff08;Dependency Injection&#xff09;是一种实现松耦合和可测试性的软件设计模式。它的核心思想是将依赖关系的创建与管理交给外部容器&#xff0c;使得对象之间只依赖于接口而不直接依赖于具体实现类。通过依赖注入…

【分布式存储】数据存储和检索~B+树

为什么数据存储结构重要 在存储系统中&#xff0c;其实不管数据是什么样的&#xff0c;归根结底其实都还是取决于数据的底层存储结构&#xff0c;而主要常见的就是数据库索引结构&#xff0c;B树、Redis中跳表、以及LSM、搜索引擎中的倒排索引。本质都是如何利用不用的数据结构…

Linux下grep通配容易混淆的地方

先上一张图: 我希望找到某个版本为8的一个libXXX.8XXX.so ,那么应该怎么写呢? 先看这种写法对不对: 是不是结果出乎你的意料之外? 那么我们来看一下规则: 这里的 "*" 表示匹配前一个字符的零个或多个 于是我们就不难理解了: lib*8*.so 表示 包…

24近3年内蒙古大学自动化考研院校分析

今天给大家带来的是内蒙古大学控制考研分析 满满干货&#xff5e;还不快快点赞收藏 一、内蒙古大学 学校简介 内蒙古大学位于内蒙古自治区首府、历史文化名城呼和浩特市&#xff0c;距北京400余公里&#xff0c;是中华人民共和国成立后党和国家在民族地区创办的第一所综合大…

pytest数据驱动 pandas

pytest数据驱动 pandas 主要过程&#xff1a;用pandas读取excel里面的数据&#xff0c;然后进行百度查询&#xff0c;并断言 pf pd.read_excel(data_py.xlsx, usecols[1,2])print(pf.values)输出&#xff1a;[[‘听妈妈的话’ ‘周杰伦’] [‘遇见’ ‘孙燕姿’] [‘伤心太平…

npm 报错 cb() never called!

不知道有没有跟我一样的情况&#xff0c;在使用npm i的时候一直报错&#xff1a;cb() never called! 换了很多个node版本&#xff0c;还是不行&#xff0c;无法解决这个问题 百度也只是让降低node版本请缓存&#xff0c;gpt给出的解决方案也是同样的 但是缓存清过很多次了&a…

【小练习】交互式网格自定义增删改错误记录及解决(进行中)

经过之前的学习&#xff0c;已经能创建简单的交互式网格并设置自定义增删改按钮&#xff0c;但是实现上还是存在一些问题&#xff0c;来完善优化一下。 首先是修改&#xff0c;正常修改都会弹出修改框&#xff0c;里面是之前存储的信息&#xff0c;根据实际需要对其进行修改&a…

Sharding-JDBC概述

前言 ​ 随着业务数据量的增加&#xff0c;原来所有的数据都是在一个数据库上的&#xff0c;网络IO及文件IO都集中在一个数据库上的&#xff0c;因此CPU、内存、文件IO、网络IO都可能会成为系统瓶颈。当业务系统的数据容量接近或超过单台服务器的容量、QPS/TPS接近或超过单个数…

web测试与app测试的区别

web测试与app测试的区别 首先从系统架构来看的话&#xff1a; web项目&#xff0c;一般都是b/s架构&#xff0c;基于浏览器的&#xff0c;而app则是c/s的&#xff0c;必须要有客户端。那么在系统测试测试的时候就会产生区别了。 web测试只要更新了服务器端&#xff0c;客户端…

vscode自带的代码诊断工具在为 c++17 的特性报错,如何取消这些报错

ctrlshiftP 打开设置界面&#xff0c;找到这个项 调整为 c17 即可

OpenCV基本操作——算数操作

目录 图像的加法图像的混合 图像的加法 两个图像应该具有相同的大小和类型&#xff0c;或者第二个图像可以是标量值 注意&#xff1a;OpenCV加法和Numpy加法之间存在差异。OpenCV的加法是饱和操作&#xff0c;而Numpy添加的是模运算 import numpy as np import cv2 as cv imp…

【PDF.js】PDF.js的简单使用与CDN加速遇到的问题

PDF.js的简单使用与CDN加速遇到的问题 一、PDF.js是什么&#xff1f;二、PDF.js三、 选择PDF.js的版本下载1. Prebuilt (现代浏览器) *作者选择2. Prebuilt (历史淘汰浏览器)3. Source 来源4. 通过CDN加速5. 文件树PrebuiltSource 6. 尝试查看器 四、选择文档&#xff08;不是使…

Vue 引入 Element-UI 组件库

Element-UI 官网地址&#xff1a;https://element.eleme.cn/#/zh-CN 完整引入&#xff1a;会将全部组件打包到项目中&#xff0c;导致项目过大&#xff0c;首次加载时间过长。 下载 Element-UI 一、打开项目&#xff0c;安装 Element-UI 组件库。 使用命令&#xff1a; npm …

SpringBoot禁用Swagger3

Swagger3默认是启用的&#xff0c;即引入包就启用。 <dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version> </dependency> <dependency><groupId…

MySQL——Mysql安装教程- Windows

一、Mysql安装 1、下载mysql安装包 下载链接&#xff1a; 链接&#xff1a; https://pan.baidu.com/s/1rFpMqOCApiQQEwYSs9XSmg https://pan.baidu.com/s/1rFpMqOCApiQQEwYSs9XSmg 提取码&#xff1a;zt88 2、 安装 1&#xff09;选择电脑磁盘空闲的路径&#xff1a; 2&…

MongoDB:Unrecognized option: storage

MongoDB一直显示 Unrecognized option: storage try ‘mongod --help’ for more information 意思是我们配置的config文件出了问题。 说明&#xff1a;MongoDB采用的是YAML格式&#xff0c;所以我们只需要稍微改改就好。 在storage前面&#xff1a;没有空格 下面两行最前面…

【有奖体验】COS插件体验,四重好礼等你拿!

对象存储 COS 为降低用户接入门槛&#xff0c;集成了多款 COS 插件&#xff0c;开放供用户使用&#xff0c;包含搭建网站、图床、论坛等多个热门业务场景的插件&#xff0c;让使用更便捷&#xff01;对象存储 COS 准备了多重好礼&#xff0c;欢迎广大同学们踊跃体验 COS 插件&a…