在lodash中是否有办法检查字符串是否包含数组中的一个值?
例如:
var text = 'this is some sample text';
var values = ['sample', 'anything'];
_.contains(text, values); // should be true
var values = ['nope', 'no'];
_.contains(text, values); // should be false
答案 0 :(得分:22)
答案 1 :(得分:3)
另一种解决方案,可能比查找每个值更有效,可以从值中创建正则表达式。
虽然迭代每个可能的值将意味着对文本进行多次解析,但使用正则表达式,只有一个就足够了。
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']));
&#13;
<强>限制强>
对于包含以下字符之一的值,此方法将失败:\ ^ $ * + ? . ( ) | { } [ ]
(它们是正则表达式语法的一部分)。
如果有可能,您可以使用以下功能(来自sindresorhus&#39; s escape-string-regexp)来保护(逃避)相关值:
function escapeRegExp(str) {
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
}
但是,如果您需要为每个可能的values
调用它,Array.prototype.some
和String.prototype.includes
的组合可能会变得更有效(请参阅@Andy和我的其他答案)
答案 2 :(得分:1)
没有。但是使用String.includes很容易实现。 You don't need lodash
这是一个简单的函数:
function multiIncludes(text, values){
return values.some(function(val){
return text.includes(val);
});
}
document.write(multiIncludes('this is some sample text',
['sample', 'anything']));
document.write('<br />');
document.write(multiIncludes('this is some sample text',
['nope', 'anything']));
&#13;