[英]JS Removing non-alphabetic characters with “new RegExp()” from string
我有一個搜索輸入,可讓我根據用戶輸入的內容過濾列表的結果。 盡管我想同時從搜索輸入和列表中刪除所有非字母字符,所以它們可以找到匹配項。
這是我目前擁有的:
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.