javascript - JS从字符串中删除带有 "new RegExp()"的非字母字符

标签 javascript regex ecmascript-6

我有一个搜索输入,允许我根据用户输入的内容过滤列表的结果。 尽管我想从搜索输入和列表中删除所有非字母字符,这样他们就可以找到匹配项。

这是我目前拥有的:

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/

相关文章:

javascript - 函数导出未按预期工作

Python正则表达式选择所有不匹配模式的元素

正则表达式匹配 HTML 中数字中的常数

regex - 使用正则表达式从 postgres 中的多行条目中修剪文本

ecmascript-6 - 对所有永不更改的变量使用const是否有意义?

javascript - TinyMce - 无法读取未定义的属性 'add'

javascript - SystemJS 相对路径

javascript - React Helm 未在 View 页面源代码中显示元标记,但在检查时显示在元素中

javascript - 第二个警报不起作用

angularjs - Uncaught ReferenceError : exports is not defined and require