簡體   English   中英

JS用“ new RegExp()”從字符串中刪除非字母字符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM