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