簡體   English   中英

正則表達式:允許變量搜索字符串中包含某些字符

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

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