1. ホーム
  2. ジャバスクリプト

[解決済み] JavaScriptで文字列が部分文字列の配列からテキストを含んでいるかどうかを確認するには?

2022-04-04 02:22:31

質問

かなりわかりやすい。javascriptで、文字列が配列に保持された部分文字列を含むかどうかをチェックする必要があります。

解決方法は?

へのコールバックで済みますが、そのための関数を書く必要があります。 some 配列メソッドです。

2つのアプローチをご紹介します。

  • Array 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}"`);
}