我有一个JSON数组:
[{"name":"foo bar"},{"name":"john doe"}]
现在,我想创建一个函数:当我输入输入字段“foo”时,必须出现“foo bar”。但如果我输入“bar”,“foo bar”也必须出现。
那么如何检查文本是否包含输入?
(我希望我的问题很清楚)
答案 0 :(得分:0)
如果您正在寻找专门用于实现此目的的正则表达式: http://www.w3schools.com/jsref/jsref_obj_regexp.asp
如果还有其他任何功能:
var str = "Check for substring";
if (str.indexOf("sub") >= 0)
{
alert("contains");
}
else
{
alert("Does not contain");
}
答案 1 :(得分:0)
对于这个简单的任务,你真的不需要正则表达式。以下是如何确定字符串是否包含子字符串:
var string = 'foo bar';
string.indexOf('foo') != -1 // true
string.indexOf('bar') != -1 // true
string.indexOf('baz') != -1 // false
如果你想让搜索更加用户友好,你可以使它不区分大小写:
function matches(string, substring) {
return string.toLowerCase().indexOf(substring.toLowerCase()) != -1
}
matches('Foo Bar', 'BAR'); // true
答案 2 :(得分:0)
如果您要查找整个单词匹配,则正则表达式应为\bfoo\b
答案 3 :(得分:0)
如果您想获得“John doe”项目的建议,只要用户输入“J”,那么您最好先查看Trie's (yes, Trie, not Tree!)并实施它(找到一个lib)或者你可以用全字查询解决; 你首先需要用空格分割你的单词并收集每个单词;
var jsonArray=[{"name":"foo bar"},{"name":"john doe"}];
var wordLookup={};
var item,split;
for (var i=0,e=jsonArray.length;i<e;++i){
item=jsonArray[i];
split=item.split(" ");
for (var u=0;u<split.length;++u){
if (typeof wordLookup[ split[0] ]==="undefined"){
wordLookup[ split[0] ]=[];
}
wordLookup[ split[0] ].push(i);
}
}
然后你会得到你的输入字段
<input type="text" id="suggestion" name="suggestion"/>
并将一个事件绑定到它,以便在keydown上搜索匹配的单词
document.getElementById("suggestion").addEventListener("keydown",function(e){
var list="",val,vs,ve;
for (vs=0,ve=this.value.length;vs<ve;++vs){
if (vs===0){val="";}
val+=this.value.charAt(vs);
if ( wordLookup[val] ){
for (var i=0;e=wordLookup[val].length;i<e;++i){
list+="- "+jsonArray[ wordLookup[val][i] ].name;
}
}
}
alert("possible matches; "+list);
});
'遗憾',它不可能正则表达对象的键(散列/映射)。我建议迭代抛出所有扩展的可能性a,ab,abc,abcd ..,就像上面的代码所示。
当然,与其向用户提醒他可以选择的内容,而不是向他显示下拉列表中的内容,他可以选择是可行的方式。但是我的代码应该指导你如何做到这一点。答案 4 :(得分:0)
为了更简单的方法,如果这足以满足您的需求,您可以尝试这条路径:
var myArray = [{"name":"foo bar"},{"name":"john doe"}];
function autoFill(input, charCode, minLength)
{
if (typeof(minLength) == 'undefined') { minLength = 3; }
var newInsertedValue = input.value + String.fromCharCode(charCode);
if (newInsertedValue.length >= minLength)
{
for (var i=0; i<myArray.length; i++)
{
var valueToFill = myArray[i].name.toString();
if (valueToFill.match(newInsertedValue))
{
return valueToFill;
}
}
}
return newInsertedValue;
}
然后像这样修改输入标记:
<input type="text" onkeypress="this.value=autoFill(this, event.charCode); return false" />
当用户键入至少3个字符时(例如,通过键入foo
),该函数将自动填充,如果您希望它从不同的字符串字符开始自动填充(例如通过键入{{ 1}}或fo
)您可以通过添加第三个参数
ba