我正在學習一些正則運算式。
現在我是否試圖從字串中獲取街道和門牌號。
所以這是我的字串“Driesstraat(Ide) 20”。Driesstraat 是街道名稱。(Ide) 是自治市的首字母縮寫詞。20是門牌號。
let re = /^(\d*[\p{L} \d'\/\\\-\.] )[,\s] (\d )\s*([\p{L} \d\-\/'"\(\)]*)$/iu
let match = adresInput.value.match(re)
if (match){
match.shift();
console.log(match.join('|'));
}
當它們不是(Ide)時,上面的代碼有效。我從比利時的 Eid 讀者那里得到了這個字串。
先感謝您
uj5u.com熱心網友回復:
首先,(...)與您的(\d*[\p{L} \d'\/\\\-\.] )模式不匹配,因此您需要在該模式之后添加(?:\(\p{L}*\))?或(?:\([^()]*\))?以選擇性地匹配括號之間的字串的一部分。(?:\(\p{L}*\))?僅匹配圓括號之間的字母和(?:\([^()]*\))?匹配以外的任何字符(和)圓括號之間。
此外,當使用帶有/u標志的正則運算式時,您必須確保只轉義字符類中必須轉義的內容。這意味著,您在[...]. 您不需要轉義(, ),如果將其放在字符類的末尾,.您甚至可以避免轉義-。必須在 ECMAScript 正則運算式風格的字符類中轉義的字符是\, ],^如果它位于字符類的開頭,則必須進行轉義。盡管-也可以轉義,但最好將其放在未轉義的字符類的末尾。
所以,你可以使用
/^(\d*[\p{L} \d'/\\.-] )(?:\([^()]*\))?[,\s] (\d )\s*([\p{L} \d/'"()-]*)$/u
請參閱正則運算式演示。
請注意,您甚至不必/在 JavaScript 中的 ECMAScript 正則運算式風格的字符類中進行轉義。
查看 JavaScript 測驗:
let re = /^(\d*[\p{L} \d'/\\.\-] )(?:\([^()]*\))?[,\s] (\d )\s*([\p{L} \d/'"()-]*)$/u;
console.log(re.test("Driesstraat(Ide) 20"));
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/399399.html
標籤:javascript 正则表达式
上一篇:過濾URL與其他帶點的文本
下一篇:替換R中字串末尾的點
