需要一个正则表达式来搜索匹配的姓氏

时间:2011-02-16 16:03:50

标签: javascript regex

我有一个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;
即使测试位于名称中,

name也应与测试字符串匹配。所以...... mik应该匹​​配'Mike'和'Smike'。

非常感谢任何帮助!

5 个答案:

答案 0 :(得分:1)

您可以从字符串创建正则表达式:

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

确保逃避正则表达式元字符 - 如果您的字符串可能包含它们。例如^$可能会导致未匹配,*? )等可能导致无效正则表达式。

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

答案 1 :(得分:1)

您可以在没有正则表达式的情况下执行此操作:

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

答案 2 :(得分:0)

Javascript string .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;

答案 3 :(得分:0)

您可以使用一个正则表达式执行此操作。

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

'woods smith'.match(r);

答案 4 :(得分:0)

你不需要正则表达式,所以我建议使用字符串操作。几乎(几乎!)总是更好地使用字符串函数而不是正则表达式:它们通常更快,并且更难犯错误。

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