RegExp以匹配JavaScript中的字符串

时间:2019-03-25 16:22:50

标签: javascript regex

当前,我正在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语句以遍历数组变量的整个长度,但这会浪费时间。

有人可以帮我解决当前的使用情况吗?

2 个答案:

答案 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));

如果您的arrNodeList,请先使用Array.from将其转换为数组。

答案 1 :(得分:0)

如果您不关心Internet Explorer(或者如果您使用并使用polyfill),则可以使用String.prototype.includes方法。所以简单地

if arr[i].toUpperCase().includes(val.toUpperCase()) //...