我有一个搜索输入,允许我根据用户输入的内容过滤列表的结果。 尽管我想从搜索输入和列表中删除所有非字母字符,这样他们就可以找到匹配项。
这是我目前拥有的:
let searchInput = '' // whatever the user types
let result = list.filter(element => element.name.match(new RegExp(searchInput, 'i')))
.sort((a, b) => true * a.name.localeCompare(b.name))
最佳答案
您可以使用正则表达式 /[\W_]+/
替换非单词字符。
尚不清楚您是尝试替换现有数据还是创建新的过滤列表。我假设是后者。
首先使用map()
创建一个删除非单词字符的列表,然后从搜索输入中删除非单词字符。然后只需过滤即可。如果您愿意,您可以将它们链接起来:
let searchInput = 'he*(llo' // whatever the user types
let list = [
{name: '#hello'},
{name: 'he$llo'},
{name: 'someevalue'},
{name: 'what'},
{name: 'hello%'}
]
let re = new RegExp(/[\W_]+/i)
let cleaned_list = list.map(i => (i.name = i.name.replace(re, ''), i))
let cleaned_input = searchInput.replace(re, '')
let result = cleaned_list.filter(element => element.name.match(new RegExp(cleaned_input)))
console.log(result)
如果您只想根据不含非字符单词的字符串进行匹配,但希望最终结果中包含原始术语,请不要先清理列表,只需在过滤时清理每个元素即可:
let searchInput = 'he*(llo' // whatever the user types
let list = [
{name: '#hello'},
{name: 'he$llo'},
{name: 'someevalue'},
{name: 'what'},
{name: 'hello%'}
]
let re = new RegExp(/[\W_]+/i)
let cleaned_input = searchInput.replace(re, '')
let result = list.filter(element => element.name.replace(re, '').match(new RegExp(cleaned_input)))
console.log(result)
关于javascript - JS从字符串中删除带有 "new RegExp()"的非字母字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51365329/