在 JavaScript 中檢查字串是否包含子字串
- 在 JavaScript 中使用正規表示式檢查字串是否包含子字串
-
在 JavaScript 中使用
String.includes()
檢查字串是否包含子字串 -
使用
String.indexOf()
檢查 JavaScript 中的字串是否包含子字串
本教程講解如何在 JavaScript 中檢查字串是否包含子字串。
這是一個簡單而常見的任務,但是不同的語言以不同的方式處理它。我們將看到 JavaScript 中的內建方法和自定義編寫的方法來實現上述目標。
在 JavaScript 中使用正規表示式檢查字串是否包含子字串
它是檢查子字串是否存在的最強大,最傳統的方法之一。與內建方法相比,它為我們提供了很大的靈活性,因為使用 JavaScript 內建方法,我們只能檢查常量字串,而不能更改其行為的區分大小寫。我們將使用 RegExp.test()
方法檢查字串中的子字串。
let str = 'delftstack';
console.log(/stack/.test(str));
輸出:
true
這裡我們使用 .test()
函式來檢視字串 delftstack
中是否存在子字串 stack
並得到 true
的結果。
但是正規表示式的優點在於我們可以執行不區分大小寫的搜尋,而內建的 JavaScript 方法是不可能做到的,我們甚至可以在不知道它是什麼的情況下尋找固定長度的數字子字串這樣的模式。
let str = 'delftstack';
console.log(stack / i.test(str));
輸出:
true
我們將 i
附加到表示式/stack/
上,然後可以進行不區分大小寫的搜尋。
在 JavaScript 中使用 String.includes()
檢查字串是否包含子字串
ES6 引入了 .includes()
函式,該函式可幫助我們檢查字串中是否存在給定的子字串。它返回一個布林值,以 true
或 false
表示存在。這是區分大小寫的方法,因此,如果子字串 S
與 s
匹配,它將返回 false
。
此方法有 2 個引數:第一個是子字串,第二個是我們要從其開始在字串內搜尋的索引。如果第二個引數在左邊界之外,即小於 0
,則 JavaScript 從索引 0
開始搜尋。如果它大於字串的長度,則直接返回 false。
const str = 'delftstack';
const substr = 'stack';
console.log(str.includes(substr));
輸出:
true
在上面的程式碼中,我們將子字串傳遞給函式,並且由於字串 delftstack
中存在 stack
,因此它返回 true
。
const str = 'delftstack';
const substr = 'stack';
console.log(str.includes(substr, 4));
輸出:
true
該程式碼從第五索引開始搜尋 stack
一詞。
使用 String.indexOf()
檢查 JavaScript 中的字串是否包含子字串
在 ES6 引入 String.includes()
方法之前,唯一的內建方法是 .indexOf()
。它與 String.includes()
方法非常相似。如果子字串存在於給定的字串內,則此方法將返回子字串的第一個字元的索引,而不是返回布林值;如果子字串不存在,則返回 -1
。
const str = 'delftstack';
const substr = 'stack';
console.log(str.indexOf(substr) != -1);
輸出:
true
它可能很舊,但是更精確,因為它可以像 .includes()
一樣使用,只需在函式的結果上新增檢查以檢視其是否等於 -1
即可。與 .includes()
不同,它向我們返回了子字串開頭的確切索引,並且可以有更多的實際意義。
所有主流瀏覽器均支援除 String.includes()
之外的所有上述方法。String.includes()
由 ES6 引入,但 Internet Explorer 仍不支援。實現此目的的另一種方法是使用 KMP(Knuth-Morris-Pratt)演算法,這是一種具有廣泛應用的 O(n)
演算法。它本身就是一個巨大的話題,我們將在以後的文章中討論。
Harshit Jindal has done his Bachelors in Computer Science Engineering(2021) from DTU. He has always been a problem solver and now turned that into his profession. Currently working at M365 Cloud Security team(Torus) on Cloud Security Services and Datacenter Buildout Automation.
LinkedIn