JS の RegExp オブジェクトで奇妙な動作が見られます。検索オートコンプリート機能の単語の先頭に対してクエリ文字列を一致させようとしています。名前の配列を反復処理して一致を返す間、正規表現は他のすべての予想される一致にのみヒットします。
var words = [
"catherine",
"caterpillar",
"nice catch",
"fat cat",
"catalina"
],
re = new RegExp('\\bcat', 'gi'),
matches = [],
results, i;
for (i=0; i<words.length; i++) {
if (re.exec(words[i])) {
matches.push(words[i]);
}
}
console.log(matches);
このコードは を返します["catherine", "nice catch", "catalina"]
。要素の順序に関係なく、動作は同じです。この RegExp オブジェクトを反復ごとに (たとえばre = new RegExp('\\bcat', 'gi')
for ループ内で) 再作成すると、期待どおりに機能し、すべての配列項目が返されますが、実際にはそうではありません。パスごとにそれを行う必要があります。
私は正規表現にあまり詳しくありません - これは私の正規表現の問題ですか? 区切り文字か何かを忘れましたか?それとも、もう 1 つの JS の癖ですか?