indexOf(), search(), includes(), startsWith(), endsWith(): 使い分け方
JavaScript の indexOf()
と search()
の違い
indexOf()
と search()
は、JavaScript の String オブジェクトで提供される、文字列検索のためのメソッドです。どちらも部分一致検索に使用できますが、いくつかの重要な違いがあります。
検索対象
indexOf()
は、文字列のみを検索できます。search()
は、文字列と正規表現の両方を検索できます。
検索の開始位置
indexOf()
は、2番目の引数で検索の開始位置を指定できます。search()
は、2番目の引数で検索の開始位置を指定できません。常に文字列の先頭から検索を開始します。
大文字小文字の区別
indexOf()
とsearch()
はどちらも、デフォルトで大文字小文字を区別します。
一致した部分の取得
indexOf()
は、一致した部分の開始インデックスを返します。search()
は、一致した部分のインデックスと長さを含むオブジェクトを返します。
使用例
例1:単純な文字列検索
const str = "Hello, world!";
// indexOf() を使用して "world" の位置を取得
const indexOfWorld = str.indexOf("world");
// search() を使用して "world" の位置を取得
const searchWorld = str.search("world");
console.log(indexOfWorld); // 7
console.log(searchWorld); // 7
この例では、indexOf()
と search()
はどちらも同じ結果を返します。
例2:正規表現を使用した検索
const str = "This is a string.";
// search() を使用して正規表現で検索
const searchResult = str.search(/\d+/);
console.log(searchResult); // 12
この例では、search()
は正規表現 /\d+/
を使用して、文字列内の数字を含む部分を探しています。
使い分け
- 単純な文字列検索には、
indexOf()
とsearch()
どちらでも使用できます。 - 正規表現を使用した検索には、
search()
を使用する必要があります。 - 検索の開始位置を指定したい場合は、
indexOf()
を使用する必要があります。 - 一致した部分の長さも取得したい場合は、
search()
を使用する必要があります。
const str = "Hello, world!";
// indexOf() を使用して "world" の位置を取得
const indexOfWorld = str.indexOf("world");
// search() を使用して "world" の位置を取得
const searchWorld = str.search("world");
console.log(indexOfWorld); // 7
console.log(searchWorld); // 7
const str = "This is a string.";
// search() を使用して正規表現で検索
const searchResult = str.search(/\d+/);
console.log(searchResult); // 12
検索の開始位置を指定
const str = "Hello, world!";
// indexOf() を使用して "world" の位置を取得 (開始位置は 8 文字目)
const indexOfWorld = str.indexOf("world", 8);
console.log(indexOfWorld); // -1
const str = "Hello, world!";
// search() を使用して "world" の位置と長さを取得
const searchResult = str.search(/world/);
console.log(searchResult.index); // 7
console.log(searchResult.length); // 5
大文字小文字を区別しない検索
const str = "Hello, WORLD!";
// indexOf() を使用して "world" の位置を取得 (大文字小文字を区別しない)
const indexOfWorld = str.indexOf("world", { ignoreCase: true });
console.log(indexOfWorld); // 7
includes()
メソッドは、部分一致検索に使用できます。
const str = "Hello, world!";
// includes() を使用して "world" が含まれているか確認
const includesWorld = str.includes("world");
console.log(includesWorld); // true
startsWith() メソッドと endsWith() メソッド
startsWith()
メソッドは、文字列が特定の文字列で始まるかどうかを確認するために使用できます。endsWith()
メソッドは、文字列が特定の文字列で終わるかどうかを確認するために使用できます。
const str = "Hello, world!";
// startsWith() を使用して "Hello" で始まるか確認
const startsWithHello = str.startsWith("Hello");
// endsWith() を使用して "world!" で終わるか確認
const endsWithWorld = str.endsWith("world!");
console.log(startsWithHello); // true
console.log(endsWithWorld); // true
match() メソッド
match()
メソッドは、正規表現を使用して文字列を検索し、一致した部分を取得するために使用できます。
const str = "This is a string.";
// match() を使用して数字を含む部分を取得
const matchResult = str.match(/\d+/);
console.log(matchResult); // ["12"]
ループ処理
単純な部分一致検索であれば、ループ処理を使用して行うこともできます。
const str = "Hello, world!";
const searchStr = "world";
let found = false;
let index = 0;
while (!found && index < str.length) {
if (str[index] === searchStr[0]) {
let match = true;
for (let i = 1; i < searchStr.length; i++) {
if (str[index + i] !== searchStr[i]) {
match = false;
break;
}
}
if (match) {
found = true;
break;
}
}
index++;
}
if (found) {
console.log(`"world" は ${index} 番目に見つかりました。`);
} else {
console.log("`world` は見つかりませんでした。");
}
javascript string