Как в JavaScript в регулярном выражении получить все остальное отличное от совпадения

Есть строка abc123/abc123/abc123
Мне нужно получить последние символы после знака /, я это делаю с помощью регулярки /[^\/]*$/g.
Но как мне можно получить остальное (т.е. всё до последнего встречающегося символа /)? В идеале хочется единую регулярку с группами показывающую результат:

group1: abc123/abc123
group2: abc123

Пробовал написать что-то наподобие (\w+\/*)*([^\/]*$), но она возвращает всю строку и последние нужные символы


Ответы (4 шт):

Автор решения: yar85

В идеале хочется единую регулярку с группами показывающую результат:

group1: abc123/abc123  
group2: abc123

const re = /(.*)\/([^/]+)?$/, 
      [, group1, group2 = ''] = 'abc123/def456/ghi789'.match(re); 
console.log({ group1, group2 }); 

upd.: Скорректировал для обработки случаев с завершающим / (теперь, в таких случаях, строка до этого завершающего слэша попадет в первую группу, а вторая будет соотв. пустой).

→ Ссылка
Автор решения: Qwertiy

Первая эффективнее, результаты в первой и второй группах.
Вторая находит 2 вхождения.

console.log("abc123/def123/qwe123".match(/^(.*)\/([^/]*)$/))
console.log("abc123/def123/qwe123".match(/([^/]|\/(?=.*\/))+/g))

→ Ссылка
Автор решения: vsemozhebuty

Ещё один из вариантов:

const str = 'abc123/abc123/abc123';

const [group1, group2] = str.split(/\/(?=[^/]*$)/);

console.log(group1);
console.log(group2);

→ Ссылка
Автор решения: Wiktor Stribiżew

Используйте

console.log("abc123/def123/qwe123".match(/(.*)\/(.*)/))

См. пример работы регулярного выражения.

Подробности

  • (.*) - Группа (подмаска) №1: ноль и более символов, отличных от перевода строки, как можно больше (т.е. всё от начала до последнего вхождения последующих шаблонов в выражении)
  • \/ - символ /
  • (.*) - Группа (подмаска) №2: ноль и более символов, отличных от перевода строки, как можно больше (т.е. оставшаяся часть строки).
→ Ссылка