2011-02-16 75 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應該匹​​配'邁克'和'Smike'。

任何幫助真的很感激!

回答

0

JavaScript字符串.search是你在找什麼。你甚至都不需要正則表達式搜索雖然支持這一點。

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

您可能想使用`names [i] .toLowerCase()`,因爲`search`區分大小寫。另外,如果我沒有記錯,你應該檢查它是否對'-1'。 – Kobi 2011-02-16 16:14:50

+0

嗯...不知道在js搜索。很高興我現在知道這一點。多謝你們! :) – 2011-02-16 16:27:47

1

您可以從一個字符串創建一個正則表達式:

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

確保雖然逃脫正則表達式元字符 - 如果你的字符串可能包含其中。例如^,$可能會導致錯過匹配,並且*,?)以及更多可能會導致無效的正則表達式。

更多信息:regular-expressions.info/javascript

+0

+1使用`push()`。 – 2011-02-16 16:11:26

0

你可以用一個正則表達式來做到這一點。

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

'woods smith'.match(r); 
1

你可以做到這一點沒有正則表達式:

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

你不需要爲這個正則表達式,所以我建議你使用字符串操作來代替。這幾乎是(差不多!)當你可以的時候總是更好地使用字符串函數而不是正則表達式:它們通常更快,而且很難犯錯誤。

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