繁体   English   中英

关于在JS中用正则表达式分割字符串的问题

[英]Question About splitting a string with Regular Expression in JS

我正在学习一些正则表达式。

现在我正在尝试从字符串中获取街道和门牌号码。

所以这是我的字符串“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)时有效。 我从比利时开斋节阅读器那里得到了这个字符串。

先感谢您

首先, (...)与您的(\d*[\p{L} \d'\/\\\-\.]+)模式不匹配,因此您需要添加(?:\(\p{L}*\))? (?:\([^()]*\))? 在该模式之后可以选择匹配括号之间的字符串的一部分。 (?:\(\p{L}*\))? 将仅匹配圆括号和(?:\([^()]*\))? 将匹配圆括号之间除()以外的任何字符。

此外,在使用带有/u标志的正则表达式时,您必须确保只转义必须在字符类中转义的内容。 这意味着,您在[...]中超出了几个字符。 您无需转义( , ) , . 你甚至可以避免 escaping -如果它放在字符 class 的末尾。 在 ECMAScript 正则表达式风格的字符类中必须转义的字符是\]^如果它位于字符 class 的开头,则必须对其进行转义。 虽然-也可以转义,但最好将其放在字符 class 的末尾,而不是转义。

所以,你可以使用

/^(\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"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM