非常に簡単です。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}"`);
}