JavaScript で文字列に部分文字列の配列のテキストが含まれているかどうかを確認するにはどうすればよいでしょうか? 質問する

JavaScript で文字列に部分文字列の配列のテキストが含まれているかどうかを確認するにはどうすればよいでしょうか? 質問する

非常に簡単です。JavaScript では、文字列に配列に保持されている部分文字列が含まれているかどうかを確認する必要があります。

ベストアンサー1

これを実行する組み込み関数はないので、some配列メソッドへのコールバックだけでもかまいませんが、そのための関数を記述する必要があります。

2 つのアプローチ:

  • 配列some
  • 正規表現

配列some

配列someメソッド (ES5 で追加) を使用すると、これは非常に簡単になります。

if (substrings.some(function(v) { return str.indexOf(v) >= 0; })) {
    // There's at least one
}

矢印関数と新しいincludesメソッド (どちらも ES2015+) を使用するとさらに良くなります。

if (substrings.some(v => str.includes(v))) {
    // There's at least one
}

実際の例:

const substrings = ["one", "two", "three"];
let str;

// Setup
console.log(`Substrings: ${substrings}`);

// Try it where we expect a match
str = "this has one";
if (substrings.some(v => str.includes(v))) {
    console.log(`Match using "${str}"`);
} else {
    console.log(`No match using "${str}"`);
}

// Try it where we DON'T expect a match
str = "this doesn't have any";
if (substrings.some(v => str.includes(v))) {
    console.log(`Match using "${str}"`);
} else {
    console.log(`No match using "${str}"`);
}

正規表現

文字列に正規表現で特別な文字が含まれていないことが分かっている場合は、次のように少しごまかすことができます。

if (new RegExp(substrings.join("|")).test(string)) {
    // At least one match
}

...これは、探している部分文字列(例: )の一連の代替one|twoである正規表現を作成し、それらのいずれかに一致するものがあるかどうかをテストします。ただし、部分文字列のいずれかに正規表現で特別な文字(*[など)が含まれている場合は、最初にそれらをエスケープする必要があり、代わりに退屈なループを実行する方がよいでしょう。それらをエスケープする方法については、を参照してください。この質問の回答

実際の例:

const substrings = ["one", "two", "three"];
let str;

// Setup
console.log(`Substrings: ${substrings}`);

// Try it where we expect a match
str = "this has one";
if (new RegExp(substrings.join("|")).test(str)) {
    console.log(`Match using "${str}"`);
} else {
    console.log(`No match using "${str}"`);
}

// Try it where we DON'T expect a match
str = "this doesn't have any";
if (new RegExp(substrings.join("|")).test(str)) {
    console.log(`Match using "${str}"`);
} else {
    console.log(`No match using "${str}"`);
}

おすすめ記事