Javascript регулярное выражение: разделить адрес на пунктуацию и начало числа, удаляя пунктуацию - PullRequest
0 голосов
/ 16 декабря 2018

Я не могу понять, как разделить адрес, где номер улицы идет после названия улицы.

Предположим, что адрес является одним из следующих:

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) запятые или, в идеале, без альфа / пунктуациив общем (например, ^ @).Эти разделители следует удалить;
2) число, за которым могут следовать буквы без удаления.

Ожидаемый результат:

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

Я пробую варианты str.split (/ (\ d + [a-zA-Z] *) / g), который по-прежнему сохраняет элементы вроде ", "(почему?).
Я также попробовал оператор ИЛИ |между разделителями 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 голосов
/ 16 декабря 2018

Вместо 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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...