如何在JavaScript中檢查字符串是否包含子字符串?

在JavaScript中檢查一個字符串是否包含某個子字符串是一個常見任務。本文將介紹幾種實現該功能的方法,包括傳統方法和高級算法。

使用 indexOf() 方法

最基礎和常見的方法是使用 indexOf() 方法。該方法返回字符串在另一個字符串中的起始位置,如果未找到則返回 -1

let mainString = "hello world";
let subString = "world";if(mainString.indexOf(subString) !== -1) {console.log("包含子字符串");
} else {console.log("不包含子字符串");
}

使用 includes() 方法

ES6引入了 includes() 方法,不僅語法簡潔,而且可讀性更好。該方法返回一個布爾值,表明是否找到了某個子字符串:

let mainString = "hello world";
let subString = "world";if(mainString.includes(subString)) {console.log("包含子字符串");
} else {console.log("不包含子字符串");
}

使用正則表達式

正則表達式是一種強大的工具,可以用來搜索復雜的模式。你可以使用 RegExp 類來創建正則表達式對象,并調用 test() 方法來檢查字符串是否包含子字符串:

let mainString = "hello world";
let subString = "world";let regex = new RegExp(subString);
if(regex.test(mainString)) {console.log("包含子字符串");
} else {console.log("不包含子字符串");
}

使用 Knuth-Morris-Pratt (KMP) 算法

對于更復雜和性能敏感的需求,可以使用KMP算法。KMP算法的最壞情況下時間復雜度為 O(n+m),相比于簡單搜索的 O(n*m) 更高效。以下是KMP算法在JavaScript中的實現:

// 使用KMP算法在文本中搜索模式字符串
// 如果找到模式,返回文本中匹配開始的索引;否則返回-1
function kmpSearch(pattern, text) {if (pattern.length === 0) return 0; // 立即匹配// 計算最長公共前后綴數組let lsp = [0]; // 基礎情況for (let i = 1; i < pattern.length; i++) {let j = lsp[i - 1]; // 記錄上一個位置的LSPwhile (j > 0 && pattern[i] !== pattern[j])j = lsp[j - 1];if (pattern[i] === pattern[j])j++;lsp.push(j);}// 遍歷文本字符串let j = 0; // 在模式字符串中匹配的字符數量for (let i = 0; i < text.length; i++) {while (j > 0 && text[i] !== pattern[j])j = lsp[j - 1]; // 模式字符串回退if (text[i] === pattern[j]) {j++; // 下一個字符匹配,增加位置if (j === pattern.length)return i - (j - 1);}}return -1; // 未找到
}console.log(kmpSearch('ays', 'haystack') !== -1); // true
console.log(kmpSearch('asdf', 'haystack') !== -1); // false

總結

本文介紹了四種在JavaScript中檢查字符串是否包含子字符串的方法:使用 indexOf()includes()、 正則表達式和KMP算法。每種方法都有其適用場景,從基本的實現到復雜的算法,你可以根據具體需求選擇合適的方法。希望本文對你有所幫助!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/19018.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/19018.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/19018.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

TPshop商城的保姆教程(windows)

提前準備 phpStudy下載&#xff1a;https://www.xp.cn/download.html 選擇適合自己的版本下載 TPshop商城源文件下載鏈接&#xff1a; https://pan.baidu.com/s/143fLrxbwe9CTMCbyx7mXJQ?pwd6666 開始安裝 安裝完phpstudy后 以管理員的身份啟動phpstudy.exe 選擇合適自己…

2024年03月 Python(六級)真題解析#中國電子學會#全國青少年軟件編程等級考試

Python等級考試(1~6級)全部真題?點這里 一、單選題(共25題,共50分) 第1題 以下選項中,創建類正確的是?() A: class test1: def prt(self): …… B: class Mg(): def__init__(na,ag): self.na=na C: class A(): def print(self): print(“Yes”) a=A() a.print() D…

【好書推薦,持續更新~~】

書籍推薦&#xff0c;持續更新~~ 1.《只是為了好玩: Linux之父林納斯自傳》-- Linus Torvalds, David Diamond Linux之父Linus Torvalds的自傳&#xff0c;也是Linus唯一一本書。Linus以調侃的語氣講述了自己的成長經歷&#xff0c;在他看來&#xff0c;一切都是為了好玩兒&am…

【Vue】v-bind屬性綁定指令

作用&#xff1a;動態設置html的標簽屬性 比如&#xff1a;src、url、title 默認情況下是單向的 語法&#xff1a; v-bind:屬性名"表達式"v-bind:可以簡寫成 > : 比如&#xff0c;有一個圖片&#xff0c;它的 src 屬性值&#xff0c;是一個圖片地址。這個地址…

Android SDK下載安裝(_指定版本)

安裝完sdk&#xff0c;就可以直接使用adb命令了&#xff0c;如果想做app相關自動化測試&#xff0c;也是需要sdk環境依賴的 一、SDK下載 A&#xff1a;官網下載&#xff1a; 管內鏡像網站(推薦)&#xff1a;https://www.androiddevtools.cn/index.html 官網&#xff1a;htt…

2024-5-9——給植物澆水 II

2024-5-9 題目來源我的題解方法一 雙指針 題目來源 力扣每日一題&#xff1b;題序&#xff1a;2105 我的題解 方法一 雙指針 使用兩個指針t1和t2記錄Alice和Bob當前還未澆水的植物&#xff0c;使用變個變量cap1和cap2表示Alice和Bob當前剩余的水量。 兩端同時澆水&#xff0…

滲透測試一些知識點

1、如果提示缺少參數&#xff0c;如{msg&#xff1a;params error}&#xff0c;可嘗使用字典模糊測試構造參數&#xff0c;進一步攻擊。 2、程序溢出&#xff0c;int最大值為2147483647&#xff0c;可嘗試使用該值進行整數溢出&#xff0c;觀察現象。 3、403&#xff0c;404響…

如何使用MATLAB寫測試(2)Negative Test

如何使用MATLAB寫測試&#xff08;2&#xff09;Negative Test 原文&#xff1a;如何使用MATLAB寫測試&#xff08;2&#xff09;Negative Test - 知乎 (zhihu.com) 上一篇請參見 如何使用MATLAB寫測試&#xff08;1&#xff09; - 知乎專欄 上一篇中&#xff0c;我們的實習…

【YashanDB知識庫】ODBC驅動類問題定位方法

【標題】ODBC驅動類問題定位方法 【需求分類】故障分析 【關鍵字】ODBC 【需求描述】由于我們的ODBC接口目前尚不完善&#xff0c;經常會遇見ODBC接口能力不足導致應用功能無法運行的問題&#xff0c;需要定位手段確定底層是哪個接口報錯 【需求原因分析】方便一線數據庫管…

【python】修改目標檢測的txt標簽(yolo)的類別ID映射

腳本功能&#xff1a; 針對目錄下的所有yolo格式的txt標簽文件&#xff0c;將class類別的id修改為指定id。 實際應用常見不多 代碼 # -*- coding: utf-8 -*- # Time : 2023/9/11 10:58 # Author : CLW # FileName: change_txt_label.py # Software: PyCharmimport os 算法功…

markdown語法保存

這里寫自定義目錄標題 歡迎使用Markdown編輯器新的改變功能快捷鍵合理的創建標題&#xff0c;有助于目錄的生成如何改變文本的樣式插入鏈接與圖片如何插入一段漂亮的代碼片生成一個適合你的列表創建一個表格設定內容居中、居左、居右SmartyPants 創建一個自定義列表如何創建一個…

實驗七 RTP、DSPP協議的配置

一、實驗目的 掌握 RIP 動態路由協議的配置、診斷方法。 二、實驗步驟 1、 運行 Cisco Packet Tracer 軟件&#xff0c;在邏輯工作區放入兩臺路由器、兩臺工作站 PC&#xff0c;分別點擊各路由器&#xff0c;打開其配置窗口&#xff0c;關閉電源&#xff0c;分別加入一個 2 …

PowerPivot-跨表取值

在PowerPivot中&#xff0c;跨表取值通常涉及創建關系和使用DAX&#xff08;數據分析表達式&#xff09;函數。 以下是一些基本步驟和常用的DAX函數&#xff0c;幫助你在PowerPivot中實現跨表取值&#xff1a; 步驟1&#xff1a;創建關系 加載數據&#xff1a;確保你已將需要…

運維筆記:流編輯器sed命令用法解析

運維筆記 sed命令用法解析 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263/arti…

數據結構與算法-有效的括號

數據結構與算法-有效的括號 大家好&#xff0c;歡迎來到我們的算法學習系列。今天是我們的第一篇文章&#xff0c;我們將探討一個經典的面試題目——有效的括號匹配問題。 什么是有效的括號匹配&#xff1f; 在許多編程語言中&#xff0c;括號用于定義代碼塊、函數參數等。確…

Matlab 結構光相移法(單頻多相)

文章目錄 一、簡介1、基于點的測距2、基于條紋的測距二、條紋編碼2.1 二進制編碼2.2相移法三、實現代碼參考文獻一、簡介 在介紹相移法之前,我們需要先了解一下為啥會有相移法,了解了其來龍去脈,則更容易去應用它。 1、基于點的測距 首先我們從點的測距開始,這有點類似于立…

每日一題《leetcode--117.填充每個結點的下一個右側結點指針||》

https://leetcode.cn/problems/populating-next-right-pointers-in-each-node-ii/ 這道題與我之前發布的題目116是一樣的解題過程&#xff0c;只是本題所給的數組大小與116不同&#xff0c;這是需要注意的。 116題目鏈接&#xff1a; http://t.csdnimg.cn/3Ub02 struct Node* c…

推導n維鏡像變換公式(householder transform)

n維鏡像變換公式&#xff0c;就是將空間某個點 X 0 X_0 X0?&#xff0c;以某個平面對對稱平面&#xff0c;平面法向量維 v v v&#xff0c;該平面過空間原點。計算 X 0 X_0 X0?的鏡像。假設鏡像為 X 1 X_1 X1?。 鏡像需要滿足下面兩個條件 &#xff08;1&#xff09; X 0 X…

RAID配置實戰

概念 raid磁盤陣列&#xff1a;可以用不同的硬盤分區&#xff0c;組成一個邏輯上的硬盤。具有高可用 raid級別&#xff1a; raid0 &#xff1a;條帶化存儲&#xff1a;數據分散在多個物理硬盤上的存儲方式。利用多個磁盤并行讀取和寫入。存儲性能和讀寫性能是最好的。沒有冗…

解讀《互聯網政務應用安全管理規定》網絡和數據安全中的身份認證和審計合規建設

為保障互聯網政務應用安全&#xff0c;由中央網絡安全和信息化委員會辦公室、中央機構編制委員會辦公室、工業和信息化部、公安部制定的《互聯網政務應用安全管理規定》近日印發&#xff0c;自2024年7月1日起施行。 規定共8章&#xff0c;包括總則、開辦和建設、信息安全、網絡…