#regex
Вопрос:
Я хочу получить первое вхождение между двумя символами, если оба существуют, в противном случае получите то, что находится перед первым найденным символом.
Например, в строках ниже:
25 de Março - Centro Histórico de São Paulo, São Paulo - SP, Brasil
Centro Histórico de São Paulo, São Paulo - SP, Brasil
Rua Hamilton Prado, 398 - Chácara Belenzinho, São Paulo - SP, 03376-000, Brasil
Я хочу понять, что стоит за символом» -«. Однако во второй строке есть только одно» -«, поэтому я хочу получить все, что за ней стоит.
Результаты, которые я ищу, таковы:
Centro Histórico de São Paulo, São Paulo
Centro Histórico de São Paulo, São Paulo
Chácara Belenzinho, São Paulo
Я попробовал следующее регулярное [^-n] (?=-[^n-]*$)
выражение, но оно не возвращает то, что я хочу, в последней строке.
Можно ли это решить с помощью регулярного выражения?
Ответ №1:
При желании вы можете сопоставить первую часть и записать вторую часть в группу
^(?:. ?- )?(. ?) -
^
Начало строки(?:. ?- )?
Необязательно сопоставлять как можно меньше символов до тех пор, пока-
(
Группа захвата 1. ?
Сопоставьте как можно меньше символов
) -
Сомкнуть группу и сопоставить-
Демонстрация регулярных выражений
Или, например, с окружающими пробелами и классом отрицаемых символов, соответствующим любому символу, кроме новой строки или -
^(?:[^n-] -)?([^n-] )-
Комментарии:
1. Спасибо! Это очень помогло =)
Ответ №2:
ИМХО, было бы лучше пройтись по строке самостоятельно.
const str = `25 de Março - Centro Histórico de São Paulo, São Paulo - SP, Brasil
Centro Histórico de São Paulo, São Paulo - SP, Brasil
Rua Hamilton Prado, 398 - Chácara Belenzinho, São Paulo - SP, 03376-000, Brasil`;
const addresses = str
.split('n')
.map(address => address
.split(' - ')
.slice(-2, -1)
).join('n');
console.log(addresses);
Логика состоит в том, чтобы взять вторую, последнюю часть каждого адреса.