我有一个小脚本,它从文本输入中获取值,并且需要部分或完全匹配数组中的项目。
我现在正在用正则表达式和语法挣扎,并想知道我是否可以挑选你的大脑。
for (var i=0; i < liveFilterData.length; i+=1) {
if (liveFilterData[i].match(liveFilter.val())) {
alert();
}
}
我需要liveFilter.val()和Regular Expression来匹配当前数组项liveFilterData [i],所以如果有人在文本框中键入H或h,它会检查数组中是否有匹配项。如果他们输入他或他,那么它匹配头,标题或标题。
抱歉,我在网上看过如何构建正则表达式,但我无法解决这个问题。
答案 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);
}
}
希望这有帮助!