Как в JavaScript в регулярном выражении получить все остальное отличное от совпадения
Есть строка abc123/abc123/abc123
Мне нужно получить последние символы после знака /, я это делаю с помощью регулярки /[^\/]*$/g.
Но как мне можно получить остальное (т.е. всё до последнего встречающегося символа /)?
В идеале хочется единую регулярку с группами показывающую результат:
group1: abc123/abc123
group2: abc123
Пробовал написать что-то наподобие (\w+\/*)*([^\/]*$), но она возвращает всю строку и последние нужные символы
Ответы (4 шт):
В идеале хочется единую регулярку с группами показывающую результат:
group1: abc123/abc123 group2: abc123
const re = /(.*)\/([^/]+)?$/,
[, group1, group2 = ''] = 'abc123/def456/ghi789'.match(re);
console.log({ group1, group2 });
upd.: Скорректировал для обработки случаев с завершающим / (теперь, в таких случаях, строка до этого завершающего слэша попадет в первую группу, а вторая будет соотв. пустой).
Первая эффективнее, результаты в первой и второй группах.
Вторая находит 2 вхождения.
console.log("abc123/def123/qwe123".match(/^(.*)\/([^/]*)$/))
console.log("abc123/def123/qwe123".match(/([^/]|\/(?=.*\/))+/g))
Ещё один из вариантов:
const str = 'abc123/abc123/abc123';
const [group1, group2] = str.split(/\/(?=[^/]*$)/);
console.log(group1);
console.log(group2);
Используйте
console.log("abc123/def123/qwe123".match(/(.*)\/(.*)/))
См. пример работы регулярного выражения.
Подробности
(.*)- Группа (подмаска) №1: ноль и более символов, отличных от перевода строки, как можно больше (т.е. всё от начала до последнего вхождения последующих шаблонов в выражении)\/- символ/(.*)- Группа (подмаска) №2: ноль и более символов, отличных от перевода строки, как можно больше (т.е. оставшаяся часть строки).