別の解決策は、すべての値を探しているよりもおそらくより効率的で、値から正規表現を作成することができます。
可能な値を反復すると、テキストの複数の解析が行われますが、正規表現では1つのみで十分です。
function multiIncludes(text, values){
var re = new RegExp(values.join('|'));
return re.test(text);
}
document.write(multiIncludes('this is some sample text',
['sample', 'anything']));
document.write('<br />');
document.write(multiIncludes('this is some sample text',
['nope', 'anything']));
制限 このアプローチは、次のいずれかの文字を含む値で失敗します:\^$ * + ? . () | { } [ ]
(彼らは正規表現構文の一部です)。
これは可能性がある場合は、関連する値(エスケープ)を保護するために(sindresorhusのescape-string-regexpから)次の関数を使用することができます:あなたはすべての可能values
のためにそれを呼び出す必要がある場合
function escapeRegExp(str) {
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
}
は、しかし、 Array.prototype.some
とString.prototype.includes
の組み合わせがより効率的になる可能性があります(@Andyと他の回答を参照)。
あなたはlodash 'values.someことなく、容易にこれを行うことができます(EL => text.indexOf(エル)> -1)'ところで。 – Andy