当前,我正在HTML表单中使用自动填充框。
其中“ val”包含文本字段的内容:
for (i = 0; i < arr.length; i++)
{
if (arr[i].substr(0, val.length).toUpperCase() == val.toUpperCase())
{
...code to create drop down list...
}
}
但这从一开始就只适用于匹配模式。而是要使用RegEx来选择任何在数组中任何位置包含val的数组项。
我尝试过
var results = arr[i].match(/val/i);
if (var)…
但是显然这失败了。
很显然,我可以修改第二条if语句以遍历数组变量的整个长度,但这会浪费时间。
有人可以帮我解决当前的使用情况吗?
答案 0 :(得分:2)
您可以简单地使用Array.prototype.filter
遍历数组以过滤掉不需要的元素。使用RegExp
构造函数从给定值动态创建正则表达式。
var regex = new RegExp(val, 'i');
arr.filter(str => str.match(regex))
.forEach(str => {
// everything here matches the regex
// ... code to create drop down list ...
});
请注意,这的确允许用户在输入框中输入正则表达式。如果要使用他们的输入文字,则必须escape the special regex characters。
或者,如果您要搜索文字匹配项,也可以使用String.prototype.includes
方法。
var upVal = val.toUpperCase();
arr.filter(str => str.toUpperCase().includes(upVal));
如果您的arr
是NodeList,请先使用Array.from
将其转换为数组。
答案 1 :(得分:0)
如果您不关心Internet Explorer(或者如果您使用并使用polyfill),则可以使用String.prototype.includes
方法。所以简单地
if arr[i].toUpperCase().includes(val.toUpperCase()) //...