RegExp以匹配JavaScript中的字符串

RegExp以匹配JavaScript中的字符串,javascript,regex,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... } } 但这显然失败了 显然,我可以修改第二个if语句,使其在整个数组变量长度上循环,

目前我正在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...
     }

}
但这显然失败了

显然,我可以修改第二个if语句,使其在整个数组变量长度上循环,但那将是浪费时间


有人能帮我处理当前的用法吗?

你可以简单地用循环遍历你的数组来过滤掉不需要的元素。使用构造函数从给定值动态创建正则表达式

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 ...
   });
注意,这允许用户也在输入框中键入regex。如果你想接受他们的输入文字,你必须这样做

或者,如果要搜索文字匹配,也可以使用该方法

var upVal = val.toUpperCase();
arr.filter(str => str.toUpperCase().includes(upVal));

如果您的
arr
是一个数组,请首先使用将其转换为数组。

如果您不关心Internet Explorer(或者如果您关心并使用polyfills),则有
字符串.prototype.includes
方法。这么简单

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

你能给我们展示一下输入和预期的输出吗?对我来说,它不像你写的正则表达式那样清晰。即使它只匹配一个实例
var results=arr[i].match(newregexp(val,'i'))
@ponury kostek,希望
val
不包含任何正则表达式metacharacters@ponury-kostek是否有可能
var results=arr[i].match(新的RegExp(val,'i'))仅在字符串开头匹配?我需要它匹配任何地方。@DanielKaplan是的,它将匹配我分配给变量的
新RegExp(val,'I')
的任何地方,以避免在
.filter
循环中重新实例化相同的regex。例如,
.filter(item=>item.match(newregexp(val,'i'))
将为您尝试匹配的每个项目实例化一个新的正则表达式。谢谢您,我相信这是最好的方法。但是在每个循环中,如何获得完整的字符串?它是项的一部分吗?@DanielKaplan
item
是字符串,我将更新答案以更好地反映这一点。
if arr[i].toUpperCase().includes(val.toUpperCase()) //...