#regex
#регулярное выражение
Вопрос:
У меня есть URL-адреса, которые выглядят примерно так: https://something/something/us/en/something
. Я хочу извлечь элементы us
раньше en
. Для этого я использую регулярное выражение.
До сих пор я был близок к тому, чтобы получить это us
использование '/[a-z]{2}[/en]'
. Как получить две буквы перед en
использованием регулярного выражения?
Комментарии:
1.Возможно
https?:\\S ?\([a-z]{2})\enb
, вот так regex101.com/r/zW7q49/1 Долженли он быть
/
в URL-адресе?2.
[A-Za-z] (?=[\/]en[\/])
Ответ №1:
Вы указали обратную косую черту в URL-адресе и косую черту в вашем регулярном выражении. Предполагая прямые косые черты для URL-адреса и регулярного выражения, вы можете определить регулярное выражение соответствия или регулярное выражение замены:
const url = 'https://something/something/us/en/something';
const regex1 = /b[a-z]{2}(?=/en/)/;
const regex2 = /^.*/([a-z]{2})/en/.*$/;
console .log('regex1 match: ' url.match(regex1));
console .log('regex2 replace: ' url.replace(regex2, '$1'));
Вывод:
regex1 match: us
regex2 replace: us
Объяснение регулярного выражения1 для соответствия:
b[a-z]{2}
— ожидайте два символа после границы слова(?=/en/)
— с последующим позитивным прогнозом на/en/
Объяснение регулярного выражения 2 для замены:
^.*
….*$
— сканирование от самого начала до самого конца (привязка с обеих сторон)/
— в рамках этого ожидайте/
([a-z]{2})
— затем запишите два символа в нижнем регистре/en/
— тогда ожидайте/en/
- при замене
'$1'
используется только захваченная группа
Ответ №2:
Во-первых, ваш URL-адрес некорректен, у вас неправильные косые черты.
Вы были очень близки, вам просто нужно было заключить в круглые скобки то, что вы хотели на самом деле «получить».
/([a-z]{2})/en/
https://regex101.com/r/w1x7eY/1
Однако это сработает только в том случае, если вы на 100% уверены, что перед /en/
битом всегда будет 2 буквы.
Если вы хотели, чтобы он фиксировал часть пути раньше, попробуйте это.
/([^/]*)/en/