我使用以下正则表达式:
\b([a-zäöüßA-ZÄÖÜ][^\s]*)
对于字符串“ ChorinerStraße12”,其匹配的“ ChorinerStraße”,如果我在regex101上进行了测试。这正是我所需要的。 但是如果我在
的代码中使用它regex.exec("Choriner Straße 12")
代码:
const street_regex = new RegExp('\\b([a-zäöüßA-ZÄÖÜ][^\\s]*)/g');
它只返回“ Choriner”。我不知道怎么了...你能帮我吗?
答案 0 :(得分:1)
请参见the MDN documentation for the RegExp function。
new RegExp(pattern[, flags])
标记需要作为第二个参数传递,表达式的末尾也不能与/FLAGS
传递。
const street_regex = new RegExp('\\b([a-zäöüßA-ZÄÖÜ][^\\s]*)', 'g');
…,但是首先您不应该使用RegExp构造函数。字符串转义使其难以阅读,并且比简单的regexp文字没有任何好处。
const street_regex = /\b([a-zäöüßA-ZÄÖÜ][^\s]*)/g;
答案 1 :(得分:0)
以下是使用/regex/
语法的有效示例:
var regex = /\b([a-zäöüßA-ZÄÖÜ][^\s]*)/g
while((match = regex.exec("Choriner Straße 12")) !== null) {
console.log('The full match object:', match);
console.log('The actual result:', match[0]);
}
答案 2 :(得分:0)
好吧,如果我正确地回答了您的问题,那么应该可以。
const getAddressWithoutNumber = fullAddress => {
const result = /(?![\s\d].+).+?(\S+).+(?=\s\d.+)/igm.exec(fullAddress);
return result && result[0] || null;
}
console.log(getAddressWithoutNumber('123 Choriner Straße 12')); // outputs "Choriner Straße"
答案 3 :(得分:0)
好吧,我发现,不是您的正则表达式不起作用,而是我的代码。我找到了正确的正则表达式,但还有一个问题。这是代码:
const regex = /\b([a-zäöüßA-ZÄÖÜ][^\s]+)/g;
const str = `Choriner Straße 12`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
for (var i = 0; i < m.length; i++) {
console.log(i,m)
}
}
这是我的控制台上的结果(for循环):
[“ Choriner”,“ Choriner”,索引:0,输入:“ ChorinerStraße12”,组:未定义] Runner-4.1.7.min.js:1 1(2)[[“ Choriner”,“ Choriner”,索引:0,输入:“ ChorinerStraße12”,组:未定义] Runner-4.1.7.min.js:1 0(2)[[“Straße”,“Straße”,索引:9,输入:“ ChorinerStraße12”,组:未定义] runner-4.1.7.min.js:1 1(2)[[“Straße”,“Straße”,索引:9,输入:“ ChorinerStraße12”,组:未定义]
如您所见,正则表达式与我想要的完全匹配,但是我需要将匹配项作为单词...