Javascript正则表达式:在标点符号和数字开头拆分地址,删除标点符号

时间:2018-12-15 22:04:23

标签: javascript regex

我不知道如何在街道名称后分割地址的地址。

假定地址是以下之一:

str='street name, 12B, 1234, The Hague, the Netherlands'
str2='street name 12B 1234AB The Hague,   the Netherlands'
str3='street name 12B 1234AB, $ ^ The Hague, the Netherlands'

我想按以下方式分割这些地址:

1)逗号,或一般情况下最好使用非alpha /标点符号(例如; ^ @)。这些分隔符应删除;
2)数字后可以跟字母而不删除。

预期结果:

['street name', '12B', '1234', 'The Hague', 'the Netherlands']

我正在尝试对str.split(/(\ d + [a-zA-Z] *)/ g)进行变体,该变体仍然保留诸如“,”(为什么?)之类的元素。
我也尝试了OR运算符|在分隔符1和2之间,但没有成功。
这一点越来越近:

str.split(/(\d+[a-zA-Z]*[,])/g).map(x=>x.trim().replace(/[,.;]/g,''))
[ "street name, ", "12B,", " ", "1234,", " The Hague, the Netherlands" ]

1 个答案:

答案 0 :(得分:2)

您也可以查看split而不是match。使用此正则表达式,您可以从match获得以下内容:

/\d\w*|\w+( +[a-z]\w*)*/gi

function parts(str) {
    return str.match(/\d\w*|\w+( +[a-z]\w*)*/gi);
}

const tests = [
    'street name, 12B, 1234, The Hague, the Netherlands',
    'street name 12B 1234AB The Hague,   the Netherlands',
    'street name 12B 1234AB, $ ^ The Hague, the Netherlands'
];

for (const str of tests) console.log(parts(str));