2016-06-16 5 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

私は最後に\\ S \\ bはやり過ぎだと思います。私は彼がスペースに参加して以来、あなたは ''\\ b' + word + '[^ \ s] +'のようなことをすることができます。関係なく++: – Rooster

+0

@Roosterあなたは正しいです。私は論理について本当に考えなかった、それはちょうど対称的だったので、私はそれをそのように書いたのです。 2番目の '\\ b'を削除しました。 – Xufox

+0

最初にUnicode文字があると、JS正規表現でUnicodeを認識できないため、 '\ b'は機能しません。 –

関連する問題