lodash _.contains string中的多个值之一

时间:2016-05-04 09:01:24

标签: javascript lodash

在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

3 个答案:

答案 0 :(得分:22)

使用_.some_.includes

_.some(values, (el) => _.includes(text, el));

DEMO

答案 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;
&#13;
&#13;

<强>限制 对于包含以下字符之一的值,此方法将失败:\ ^ $ * + ? . ( ) | { } [ ](它们是正则表达式语法的一部分)。

如果有可能,您可以使用以下功能(来自sindresorhus&#39; s escape-string-regexp)来保护(逃避)相关值:

function escapeRegExp(str) {
  return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
}

但是,如果您需要为每个可能的values调用它,Array.prototype.someString.prototype.includes的组合可能会变得更有效(请参阅@Andy和我的其他答案)

答案 2 :(得分:1)

没有。但是使用String.includes很容易实现。 You don't need lodash

这是一个简单的函数:

&#13;
&#13;
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;
&#13;
&#13;