2011-02-16 7 views
4

私は姓の文字列を保持するjavascript配列を持っています。 この配列をループし、指定された文字列に一致する姓を分離する必要があります。は一致する姓を検索する正規表現が必要です

var names = ['woods','smith','smike']; 
var test = 'smi'; 
var c = 0; 
var result = new Array(); 
for(var i = 0; i < names.length; i++) 
{ 
if(names[i].match(test))// need regular expression for this 
result[c++] = names[i]; 
} 
return result; 

名前はテストが名前の範囲内にあってもテスト文字列と一致する必要があります。だから... mikは 'Mike'と 'Smike'にもマッチするはずです。

本当にありがとうございます!

答えて

0

Javascriptの文字列.searchあなたは...あなたも検索があまりにもサポートしていますがregexでは必要ありません探しているものです。

var names = ['woods','smith','smike']; 
var test = 'smi'; 
var c = 0; 
var result = new Array(); 
for(var i = 0; i < names.length; i++) 
{ 
if(names[i].toLowerCase().search(test))// need regular expression for this 
result.push(names[i]); 
} 
return result; 
+0

'search 'は大文字と小文字が区別されるので、' names [i] .toLowerCase() 'を使いたいでしょう。また、私が正しく覚えていれば、それを '-1'と照合するべきです。 – Kobi

+0

うーん... jsの検索について知りませんでした。私はこれを今知ってうれしい。みんなありがとう! :) –

1

あなたは、文字列から正規表現を作成することができます。

var nameRe = new RegExp("mik", "i"); 
if(names[i].match(nameRe)) 
{ 
    result.push(names[i]); 
} 

しかし、正規表現のメタ文字をエスケープすることを確認してください - あなたの文字列は、それらを含む可能性がある場合。たとえば、^の場合、$は一致しない可能性があり、*,?)以上の正規表現は無効です。

さらに詳しい情報:regular-expressions.info/javascript

+0

+1は 'push()'を使用しています。 –

0

これは1つの正規表現で行うことができます。

var r = new RegExp(names.join('|'), "igm"); 

'woods smith'.match(r); 
1

あなたは正規表現せずにこれを行うことができます:

if (names[i].toLowerCase().indexOf(test.toLowerCase()) >= 0) 
    // ... 
+0

それは正しい...私もこれについて考えていたはずです。シンプルで簡単。アアズありがとう! –

+0

@zoom - あなたはこの答えを受け入れるべきです、私の意見では、それは最高です。 'search'オプションで'> = 0'をチェックする必要があります。投稿されたコードが間違っています。 – Kobi

0

をあなたはこのために正規表現を必要としないので、私が代わりに文字列操作を使用してお勧めします。ほとんどの場合(ほぼ!)、正規表現の代わりに文字列関数を使用する方が良い場合があります。通常は高速で、間違いをするのは難しいです。

for(var i = 0; i < names.length; i++) 
{ 
    if(names[i].indexOf(test) > -1) 
     //match, do something with names[i]... 
} 
関連する問題