2016-06-16 47 views
1

當我運行下面的代碼時,結果將是["ai", "ai"]。我正在嘗試創建一個函數,它將返回["airport", "airplane"]。什麼是最好的方式去做這件事?如何返回每個匹配的完整單詞而不是僅匹配使用匹配的單詞的部分?

var gill = ['airplane', 'airport', 'apple', 'ball'] 

function auto(word, array) { 
    var geo = array.join(" ") 

    var snoop = new RegExp(word, "gi") 

    var gip = geo.match(snoop) 

    console.log(gip) 
} 

auto("ai", gill) 

回答

4
var snoop = new RegExp("\\b\\S*" + word + "\\S*", "gi"); 

似乎做的工作。它使用字邊界檢查(\b)。

但是ECMAScript 5.1中有更好的選擇,例如通過使用filter

var gill = [ 
 
    "airplane", 
 
    "airport", 
 
    "apple", 
 
    "ball" 
 
]; 
 

 
function auto(array, word){ 
 
    return array.filter(function(a){ 
 
    return new RegExp(word, "gi").test(a); 
 
    }); 
 
} 
 

 
console.log(auto(gill, "ai"));

+0

我覺得\\ \\小號b。在到底是矯枉過正。我想,自從他加入一個空間後,你可以做一些像''\\ b'+ word +'[^ \\ s] +'的東西。無論++ :) – Rooster

+0

@Rooster你是對的。我沒有真正考慮邏輯,它只是對稱的,這就是我爲什麼這樣寫的原因。我刪除了第二個'\\ b'。 – Xufox

+0

如果開頭有Unicode字母,'\ b'將不起作用,因爲它在JS正則表達式中不能識別Unicode。 –