Как сопоставить строку с гипсами в JavaScript? - PullRequest
1 голос
/ 12 октября 2019

Я хочу сопоставить определенные части URL-адреса, имеющего следующую форму:

http://example.com/somepath/this-is-composed-of-hypens-3144/someotherpath

Точнее, я хочу сопоставить только ту часть, которая состоит из всех переносов и заканчивается числами. Итак, я хочу извлечь часть this-is-composed-of-hypens-3144 в приведенном выше URL. У меня есть что-то вроде этого:

const re = /[a-z]*-[a-z]*-[0-9]*/gis;
const match = re.exec(url);
return (match && match.length) ? match[0] : null;

Тем не менее, это работает, только если есть 2 гипса, однако количество гипсов в моем случае может быть произвольным. Как я могу заставить мое регулярное выражение работать с произвольным числом гипсов?

1 Ответ

1 голос
/ 12 октября 2019

Вы можете использовать

/\/([a-z]+(?:-[a-z]+)*-[0-9]+)(?:\/|$)/i

См. Демоверсию regex

Подробности

  • \/- a / char
  • ([a-z]+(?:-[a-z]*)*-[0-9]+) - Группа захвата 1:
    • [a-z]+ - 1+ ASCII-букв
    • (?:-[a-z]+)* - 0+ вхождений - сопровождается 1+ ASCII-буквами
  • (?:\/|$) - либо /, либо конец строки.

Если может быть любое слово из символов, нетолько буквы ASCII, вы можете заменить каждую [a-z] на \w.

var s = "http://example.com/somepath/this-is-composed-of-hypens-3144/someotherpath";
var m = s.match(/\/([a-z]+(?:-[a-z]+)*-[0-9]+)(?:\/|$)/i);
if (m) {
  console.log(m[1]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...