2017-08-30 28 views
1

我想检查字符串s是否包含列表中的任何标记L检查一个字符串是否包含列表中的一个标记,用Javascript

JavaScript中是否有内置函数?或者我必须的东西,如手工进行:

function present(s, L) { 
    for (var i = 0; i < L.length; i++) 
    if (s.indexOf(L[i]) !== -1) 
     return true; 
    return false; 
} 

var L = ['abc', 'def', 'ghi']; 
var s = 'Yes, definitely.'; 
present(s, L); // true 
+1

尝试使用array.filter –

+0

灿你提供一个例子,供将来参考@GopalkrishnaNarayanPrabhu? – Basj

回答

1

您可以只用坚持他们每个人之间的|运营商创建与list所有项目正则表达式。然后使用RegExp.prototype.test(),检查是否有匹配:

function isPresent(string, list) { 
    return new RegExp(list.join('|')).test(string) 
} 
var list = ['abc', 'def', 'ghi']; 
var string = 'Yes, definitely.'; 
isPresent(string, list); // true 
+0

您需要确定这些标记中没有包含特殊字符,否则您需要将其转义。 – Bergi

+0

@Bergi非常真实!接得好。 – bowheart

3

可以简化与some高阶函数的循环,并用includes代替indexOf

L.some(token => s.includes(token)) 
+0

令人印象深刻!此语法是否适用于所有浏览器?它看起来像魔术(我不记得自从何时'=>'支持)。 – Basj

+0

@Basj http://caniuse.com/#feat=arrow-functions,对于'some'和'includes'请参阅MDN – Bergi

+0

的兼容性表格。为了更广泛的支持,我们可以使用'L.some(function(t){返回s.includes(t)});'。 – Basj

相关问题