Regex Express Возврат всех символов до '/', но если есть 2 '/' Возврат всех до этого - PullRequest
3 голосов
/ 06 ноября 2019

Я пытался получить выражение регулярного выражения, чтобы вернуть мне следующее в следующих ситуациях:

XX         ->   XX
XXX        ->   XXX
XX/XX      ->   XX
XX/XX/XX   ->   XX/XX
XXX/XXX/XX ->   XXX/XXX

У меня было следующее регулярное выражение, однако они не работают.

^[^/]+     => https://regex101.com/r/xvCbNB/1
=========
([A-Z])\w+ => https://regex101.com/r/xvCbNB/2

Они близко, но не там.

Любая помощь будет оценена.

Ответы [ 3 ]

3 голосов
/ 06 ноября 2019

Вы хотите получить весь текст от начала до последнего вхождения определенного символа или до конца строки, если символ отсутствует.

Использование

^(?:.*(?=\/)|.+)

См. regex demo и regex graph :

enter image description here

Подробности

  • ^ - начало строки
  • (?:.*(?=\/)|.+) - группа без захвата, которая соответствует любой из двух альтернатив, и если первая соответствует первой, вторая не будет пробоваться:
    • .*(?=\/) - любые 0+ символов, кроме символов разрыва строки, максимально возможное число, вплоть до /
    • | - или
    • .+ - любые 1+ символов, кроме символов разрыва строки, как можно больше.
3 голосов
/ 06 ноября 2019

Здесь будет проще использовать замену, чтобы соответствовать /, за которым следуют символы без косой черты до конца строки:

Регулярное выражение поиска:

/[^/]*$

Строка замены:

""

Обновлено демо RegEx 1


Если вы ищете совпадение с регулярным выражением, используйте это регулярное выражение:

^(.*?)(?:/[^/]*)?$

Обновленная демоверсия RegEx 2

1 голос
/ 06 ноября 2019

Есть какая-то особая причина, по которой это должно быть регулярное выражение? Как насчет простого разделения строки на слешах, удаления последнего элемента и воссоединения:

function removeItemAfterLastSlash(string) {
  const list = string.split(/\//);
  if (list.length == 1) [
     return string;
  } 

  list.pop();
  return list.join("/");
}

Или поиска последнего слеша и удаления:

function removeItemAfterLastSlash(string) {
  const index = string.lastIndexOf("/");
  if (index === -1) {
    return string;
  }
  return string.splice(0, index);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...