我有一個JSON陣列:的preg_match在JavaScript
[{"name":"foo bar"},{"name":"john doe"}]
現在,我想打一個功能:當我在輸入字段爲「foo」我打字,「富巴」已經出現。但是如果我輸入「bar」,「foo bar」也必須出現。
那麼如何檢查文本是否包含輸入?
(我希望我的問題是不夠清楚)
我有一個JSON陣列:的preg_match在JavaScript
[{"name":"foo bar"},{"name":"john doe"}]
現在,我想打一個功能:當我在輸入字段爲「foo」我打字,「富巴」已經出現。但是如果我輸入「bar」,「foo bar」也必須出現。
那麼如何檢查文本是否包含輸入?
(我希望我的問題是不夠清楚)
對於這個簡單的任務,你並不需要正則表達式。這裏是如何找出一個字符串是否包含一個子:
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
如果你專門爲正則表達式尋找實現這一目標: 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");
}
如果你正在尋找一個完整的詞匹配,你的正則表達式應該是\bfoo\b
如果你想獲得項目「John doe」的建議,只要用戶輸入「J」,那麼,你會更好地查看Trie's (yes, Trie, not Tree!)並執行它(找到一個lib)或者你可以d用全字查詢解決; 你首先需要用空白分開你的單詞並收集每個單詞;
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 ..,就像上面演示的代碼一樣。
當然,與其告知用戶他可以選擇什麼,向他展示那些在下拉內的選擇是他可以選擇的方式。但是我的代碼應該指導你如何做到這一點的正確方向。
對於一個更簡單的方法,如果這是滿足你的需求,你可以試試這個路徑:
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
)時填充,如果您希望它從不同的字符串字符開始自動填充(例如,輸入fo
或ba
),則可以通過添加第三個參數如
<input type="text" onkeypress="this.value=autoFill(this, event.charCode, 2); return false" />
爲什麼你會用一個普通的「string x is in string y」檢查一個正則表達式? – ThiefMaster
那麼,你想檢查某個字符串是否在另一個字符串中? ['string.indexOf'](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/indexOf) – Zirak
什麼是鏈接!謝謝@MarceloDiniz。 –