正则表达式:匹配部分或完整字符串

时间:2011-03-08 14:07:21

标签: javascript regex match

我有一个小脚本,它从文本输入中获取值,并且需要部分或完全匹配数组中的项目。

我现在正在用正则表达式和语法挣扎,并想知道我是否可以挑选你的大脑。

for (var i=0; i < liveFilterData.length; i+=1) {

    if (liveFilterData[i].match(liveFilter.val())) {
        alert();
    }
}

我需要liveFilter.val()和Regular Expression来匹配当前数组项liveFilterData [i],所以如果有人在文本框中键入H或h,它会检查数组中是否有匹配项。如果他们输入他或他,那么它匹配头,标题或标题。

抱歉,我在网上看过如何构建正则表达式,但我无法解决这个问题。

2 个答案:

答案 0 :(得分:1)

简单的字符串比较shold可以做到这一点:

for (var v, i = liveFilterData.length; i--;) { 
    if (liveFilterData[i].slice (0, (v = liveFilter.val().toLowerCase ()).length) === v) {
        alert();
    }
}

liveFilterData应包含小写的单词。

答案 1 :(得分:0)

我不确定我完全理解这个问题。 liveFilter.val()是一个正则表达式,还是只是一个字符串,你试图匹配数组中的任何值?我猜你在文本框的keypress,keydown或keypress上有一个事件,而你上面编写的代码在回调此事件时运行。如果是这样,您可以执行许多操作将值转换为适当的正则表达式:"^"+liveFilter.val(),因为您在循环中使用正则表达式,所以应该使用new RegExp进行预编译,这样您的循环看起来像:

//the i in the second param here is a flag indicating case insensitive
//a hat '^' in regex means 'beginning of the input'
regex = new RegExp("^"+liveFilter.val(), i);
for (var i=0; i < liveFilterData.length; i+=1) {
    // regex.test uses the precompiled regex, and determines if there is a match 
    if (regex.test(liveFilterData[i])) {
        alert("matched " + i);
    }
}

希望这有帮助!