请考虑这种情况:
我有一个像这样的Key / Value变量:
var dict = {"78": "X",
"12": "G",
"18": "R",
"67": "U",
"68": "O",
"30": "P"}
我有一个字符串,我想检查我的字符串中是否存在我的变量字母。我怎么能这样做?
答案 0 :(得分:2)
收集对象键值并使用它们来创建正则表达式。然后使用.test(yourString)
:
var myStr = "Group";
new RegExp(Object.keys(dict).map(function (c) { return dict[c]; }).join("|"))
.test(myStr); // true
另一种方法是简单地迭代对象:
var found = false;
for (var k in dict) {
if (myStr.indexOf(dict[k]) !== -1) {
found = true;
break;
}
}
if (found) {
// letter found
}
答案 1 :(得分:1)
一种可能的方法:
var contains = Object.keys(dict).some(function(key) {
return someStr.indexOf(dict[key]) !== -1;
});
换句话说,迭代集合,在每一步检查字符串中是否存在测试字符(someStr
)。如果是,立即停止迭代(这就是Array.prototype.some
的工作原理)。
另一种方法是构建一个字符类正则表达式,然后将其用于字符串:
var pattern = RegExp('[' + Object.keys(dict).map(function(k) {
return dict[k];
}).join('') + ']');
var contains = pattern.test(someStr);
如果测试的字符串通常包含来自dict
的字符,则第二种方法稍好一些。将此解决方案扩展为不区分大小写的搜索也很容易 - 只需添加'i'
字符串作为RegExp调用的第二个参数。
需要注意的是,您必须在传递给RegExp构造函数(例如反斜杠)的字符串中转义将被视为meta
的字符。如果字典中没有这样的字符,那么这不是问题。
答案 2 :(得分:1)
可以使用以下方法完成:
str = "test";
isExists = false;
for(var key in dict){
isExists = str.indexOf(dict[key]) !== -1;
if(isExists)
break;
};
console.log(isExists);