我有一个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'。
非常感谢任何帮助!
答案 0 :(得分:1)
您可以从字符串创建正则表达式:
var nameRe = new RegExp("mik", "i");
if(names[i].match(nameRe))
{
result.push(names[i]);
}
确保逃避正则表达式元字符 - 如果您的字符串可能包含它们。例如^
,$
可能会导致未匹配,*
,?
)
等可能导致无效正则表达式。
答案 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]...
}