[英]regex: allow certain characters within a variable search string
我正在嘗試在js中使用正則表達式從名稱列表中搜索名稱。 我希望用戶允許在其輸入中使用某些字符( -
, _
,空格),並且仍然找到正確的結果。
例如
如果名稱是"New York"
,則應匹配以下內容:
"New York"
"newyork"
"new york"
"new-york"
"new_york"
" New york"
那當然不是所有的可能性。 我真的不確定如何解決這個問題。
編輯感謝您的快速解答。
我想我沒有說清楚我的問題。 我的目標是查找輸入字符串是否包含在字符串列表中。 輸入的字符必須與列表中的元素匹配,但是這些特定字符將被忽略。
正則表達式 : \\s?\\w+[\\s-_]?\\w+
詳細資料 :
\\s
與任何等於[\\ r \\ n \\ t \\ f \\ v]的空格字符匹配
\\w
匹配等於[a-zA-Z0-9_]的任何單詞字符
+
無限次匹配
[]
匹配列表中存在的單個字符
?
零到一匹配
沒錯,Regex非常適合此功能。
var name = 'New~York';
if (name.match(/^[a-zA-Z-_ ]+$/g) == null) {
alert('Name contains invalid characters');
}
我認為您應該從查詢字符串和列表中的項目中刪除允許的字符,然后對這兩個字符串的其余部分進行簡單的比較:
var regex = /[-_ ]/g; // regex containing the allowed chars (g modifier required)
var query = "New York"; // the query string to be used for searching
var list = [/* list of words */]; // the list to get matches from
query = query.replace(regex, "").toLowerCase(); // remove the allowed chars from the query and convert it to lowercases
var matches = list.filter(function(word) { // for each word in the list
return query === word.replace(regex, "").toLowerCase(); // remove the allowed chars, convert to lowercases, then compare with the altered query (if they matched then return true)
});
例:
var list = ["New York", "New Fork", "newyork", "new york", "new-york", "new_york", " New york", "new orky", "---n-e_w- y____o_-rk_-_-_-"]; var regex = /[-_ ]/g; var query = prompt("Enter the query yo!", "Ne---w-_---York") || ""; query = query.replace(regex, "").toLowerCase(); var matches = list.filter(function(word) { return query === word.replace(regex, "").toLowerCase(); }); console.log(matches);
您可以根據目標字符串創建正則表達式模式。 我將在使用.toLowerCase()進行比較之前將所有字符串都轉換為小寫字母,使用.split('')進行空格分割,然后通過在前面,后面和空格中使用[\\ s _-] *從部分構建正則表達式。
[\s_-]*new[\s_-]*york[\s_-]*
謝謝您的幫助!
通過替換搜索和目標字符串中的字符並使它們相互匹配,我終於找到了解決方案:
regex = new RegExp(input.replace(/[-\s_'´`]+/i, ''), "i");
if (regex.test(target.replace(/[-\s_'´`]+/i, ''))){ ... }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.