RegExp以匹配JavaScript中的字符串
目前我正在HTML表单中使用自动完成框 其中“val”包含文本字段的内容: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语句,使其在整个数组变量长度上循环,
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'))
将为您尝试匹配的每个项目实例化一个新的正则表达式。谢谢您,我相信这是最好的方法。但是在每个循环中,如何获得完整的字符串?它是项的一部分吗?@DanielKaplanitem
是字符串,我将更新答案以更好地反映这一点。
if arr[i].toUpperCase().includes(val.toUpperCase()) //...