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

news2024/11/24 23:09:08

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

🧐碎碎念:最近在写文案的时候,总是要避免出现一个敏感词汇,利用 (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.coloradmin.cn/o/865731.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用 AndroidX 增强 WebView 的能力

在App开发过程中&#xff0c;为了在多个平台上保持一致的用户体验和提高开发效率&#xff0c;许多应用程序选择使用 H5 技术。在 Android 平台上&#xff0c;通常使用 WebView 组件来承载 H5 内容以供展示。 一.WebView 存在的问题 自 Android Lollipop 起&#xff0c;WebVie…

TFN 新推出信息安全产品 ,手机安全(插卡监听器)探测器 FW5 反窃听数字协议无线探测器

本产品是新研制的检测设备&#xff0c;工程师或反监测专家把它作为一个可靠的工具&#xff0c;用来 跟踪各种无线电数字传输设备&#xff0c;例如 GSM 、蓝牙等新型视听设备。随着现代科学技术 的不断发展&#xff0c;不同的数字传输方式已在我们的生活中得到了广泛的应用。例…

01 - 工作区、暂存区、版本库、远程仓库 - 以一次连贯的提交操作为例

1. 工作区、暂存区、版本库、远程仓库 以一次连贯的提交操作为例。 1.1 工作区 Git的工作区也就是我们平时编辑代码的目录文件夹。 新建一个kongfu_person.txt文件&#xff0c;工作区的变化&#xff1a; 1.2 工作区 > 暂存区&#xff1a;git add 1.3 暂存区 > 版本库…

新能源汽车需要检测哪些项目

截至2022年底&#xff0c;中国新能源车保有量达1310万辆&#xff0c;其中纯电动汽车保有量1045万辆。为把好新能源汽车安全关&#xff0c;我国新能源汽车除了完善的强制性产品认证型式实验外&#xff0c;还建立了“车企-地方-国家”逐级上报的三级监管体系实行新能源汽车全生命…

2000-2021年地级市碳排放数据/地级市二氧化碳排放

2000-2021年地级市碳排放数据/地级市二氧化碳排放 1、时间&#xff1a;2000-2021年 2、来源&#xff1a;主要是各级统计年鉴、相关统计资料等。其中&#xff0c;能源部分分能源品种分部门的能 源消费数据来源于《中国能源统计年鉴》以及各级统计年鉴&#xff1b;工业过程和产…

编译Linux的时候出现 Restart config...

环境 buildroot 问题 在buildroot路径下执行 make linux-rebuild 出现了Restart config… 的问题 原因 我在修改linux源码的时候&#xff0c;在没有指定ARCH架构的情况下&#xff0c; 直接去linux源码目录(output/build/linux/)下执行了 make menuconfig并覆盖了原来的.c…

Linux 共享内存mmap,进程通信

文章目录 前言一、存储映射 I/O二、mmap&#xff0c; munmap三、父子进程间 mmap 通信四、非血缘关系进程间 mmap 提通信五、mmap 匿名映射区总结 前言 进程间通信是操作系统中重要的概念之一&#xff0c;使得不同的进程可以相互交换数据和进行协作。其中&#xff0c;共享内存…

Pycharm解决启动时候索引慢的问题

设置里去掉update里面的两个勾 shared indexes中&#xff0c;把自动下载索引改成不下载使用本地索引

JVM G1垃圾回收机制介绍

G1(Garbage First)收集器 (标记-整理算法)&#xff1a; Java堆并行收集器&#xff0c;G1收集器是JDK1.7提供的一个新收集器&#xff0c;G1收集器基于“标记-整理”算法实现&#xff0c;也就是说不会产生内存碎片。此外&#xff0c;G1收集器不同于之前的收集器的一个重要特点是&…

【OpenAI】当人工智能遇到道德困境问题(铁轨选择问题),它会怎么回复?

一条铁轨上&#xff0c;五个小孩在玩耍&#xff0c;而一辆火车即将撞上他们&#xff0c;这时你就在铁轨转轴拉杆的旁边&#xff0c;你可以选择拉下拉杆&#xff0c;让火车开向另一条铁轨&#xff0c;但是&#xff0c;另一条铁轨上&#xff0c;有一个铁轨工人正在休息。你会怎么…

赴日IT培训 想拿高度人才签证 加10分的IT资格哪个简单?

其实日本和我们国家一样&#xff0c;IT方面的资格证也是有很多的&#xff0c;你或许会担心万一我考的证没用可怎么办&#xff1f;我们应该知道&#xff0c;我们作为一个外国人&#xff0c;在掌握一些日本语言的情况下&#xff0c;考证本身对咱们来说就是一个学习的过程&#xf…

DIP:《Deep Image Prior》经典文献阅读总结与实现

文章目录 Deep Image Prior1. 方法原理1.1 研究动机1.2 方法 2. 实验验证2.1 去噪2.2 超分辨率2.3 图像修复2.4 消融实验 3. 总结 Deep Image Prior 1. 方法原理 1.1 研究动机 动机 深度神经网络在图像复原和生成领域有非常好的表现一般归功于神经网络学习到了图像的先验信息…

细数4K超清大运中的国产摄像机前端替代

8月8日&#xff0c;万众瞩目的成都大运会正式闭幕&#xff0c;此次赛事是继2001年北京大运会、2011年深圳大运会之后&#xff0c;中国大陆第三次举办大运会。中国队以103金40银35铜的成绩收官&#xff0c;金牌榜、奖牌榜双双第一。本届大运会执行“全4K”制作标准&#xff0c;是…

HCIP MPLS解决BGP黑洞路由和VPN技术

一、使用MPLS解决BGP的路由黑洞 前提条件&#xff1a;IBGP内部全网可达&#xff0c;并配置了MPLS。 MPLS协议并不会为通过BGP协议学习的路由条目分配标签号&#xff1b; 而是在访问这些BGP路由目标网段时&#xff0c;在流量中压入到达这些网段的BGP下一跳设备地址的标签号&a…

Go http.Handle和http.HandleFunc的路由问题

Golang的net/http包提供了原生的http服务&#xff0c;其中http.Handle和http.HandleFunc是两个重要的路由函数。 1. 函数介绍 http.HandleFunc和http.Handle的函数原型如下&#xff0c;其中DefaultServeMux是http包提供的一个默认的路由选择器。 func HandleFunc(pattern st…

大模型时代的程序员:不会用AIGC编程,未来5年将被淘汰?

作者 | 郭炜 策划 | 凌敏 前言 下面是一段利用 Co-Pilot 辅助开发的小视频&#xff0c;这是 Apache SeaTunnel 开发者日常开发流程中的一小部分。如果你还没有用过 Co-Pilot、ChatGPT 或者私有化大模型帮助你辅助开发的话&#xff0c;未来的 5 年&#xff0c;你可能很快就要…

企业直播MR虚拟直播(MR混合现实直播技术)视频介绍

到底什么是企业直播MR虚拟直播&#xff08;MR混合现实直播技术&#xff09;&#xff1f; 企业直播MR虚拟直播新玩法&#xff08;MR混合现实直播技术&#xff09; 我的文章推荐&#xff1a; [视频图文] 线上研讨会是什么&#xff0c;企业对内对外培训可以用线上研讨会吗&#x…

软件测试面试时一些不能说的离职原因

“你为什么从上一家公司离职&#xff1f;”这个问题在面试时基本都会被问到&#xff0c;这是无法避免的问题。那么什么样的理由才能做到既反映实际情况&#xff0c;又能得到HR认可呢&#xff1f;以下的几种回答千万不能脱口而出。 1、毫无顾忌地说前公司的坏话 1&#xff09;…

nodejs+vue+elementui招聘求职网站系统的设计与实现-173lo

&#xff08;1&#xff09;管理员的功能是最高的&#xff0c;可以对系统所在功能进行查看&#xff0c;修改和删除&#xff0c;包括企业和用户功能。管理员用例如下&#xff1a; 图3-1管理员用例图 &#xff08;2&#xff09;企业关键功能包含个人中心、岗位类型管理、招聘信息…

TOMCAT的多实例部署和动静分离

tomcat的多实例 动静分离 排错小工具&#xff1a; telnet工具&#xff1a;yum -y install telnet telnet工具用于测试端口是否正常 telnet 20.0.0.101 80Tomcat多实例部署&#xff1a; 一台服务器上有多个tomcat的服务 1.安装好 jdk 2.安装 tomcat cd /opt tar zxvf apache-…