Извлечение сложной части строки с простым Javascript - PullRequest
1 голос
/ 19 марта 2019

У меня есть следующая строка:

<a href="https://my.domain.com/personal/jan_kowalski_pl_company_com/Documents/Forms/All.aspx">Text</a>

Я хочу извлечь из этой строки, используя JavaScript 'pl' или 'pl_company_com'

Есть несколько переменных:

  • jan_kowalski - это имя и фамилия, которые могут быть изменены, а иногда даже имеют 3 элемента

  • код страны (в данном примере 'pl') изменится на другой en / de / fr (это та часть строки, которую я хочу получить)

  • остальная часть строки остается одинаковой для каждого случая (начало + все после запуска с _company_com ...

Ps. Я пытался сделать это с помощью split, но мои знания JS очень просты, и я не могу получить то, что хочу, просто помогите

Ответы [ 2 ]

2 голосов
/ 19 марта 2019

Альтернатива решению Рэнди Кэсберна с использованием регулярных выражений

let out = new URL('https://my.domain.com/personal/jan_kowalski_pl_company_com/Documents/Forms/All.aspx').href.match('.*_(.*_company_com)')[1];

console.log(out);

Или, если вы хотите просто получить эту строку с указанными вами кодами стран

let out = new URL('https://my.domain.com/personal/jan_kowalski_pl_company_com/Documents/Forms/All.aspx').href.match('.*_((en|de|fr|pl)_company_com)')[1];

console.log(out);

let out = new URL('https://my.domain.com/personal/jan_kowalski_pl_company_com/Documents/Forms/All.aspx').href.match('.*_((en|de|fr|pl)_company_com)')[1];

console.log(out);

Подтверждение концепции, что это решение работает и для других комбинаций

let urls = [
new URL('https://my.domain.com/personal/jan_kowalski_pl_company_com/Documents/Forms/All.aspx'),
new URL('https://my.domain.com/personal/firstname_middlename_lastname_pl_company_com/Documents/Forms/All.aspx')
]

urls.forEach(url => console.log(url.href.match('.*_(en|de|fr|pl).*')[1]))
0 голосов
/ 19 марта 2019

Раньше я был очень успешен с такими проблемами с регулярными выражениями:

var string = '<a href="https://my.domain.com/personal/jan_kowalski_pl_company_com/Documents/Forms/All.aspx">Text</a>';
var regExp = /([\w]{2})_company_com/;

find = string.match(regExp);

console.log(find); // array with found matches
console.log(find[1]); // first group of regexp = country code

Сначала вы получили заданную строку. Во-вторых, у вас есть регулярное выражение, которое отмечается двумя косыми чертами в начале и в конце. Регулярное выражение в основном используется для поиска строк (вы можете даже заменить сложный текст во всех основных редакторах, что может быть ОЧЕНЬ полезно). В данном случае здесь он соответствует точно двум символам слова [\w]{2}, за которыми непосредственно следует _company_com (\w обозначает символ слова, [] группирует все требуемые типы символов, здесь только символы слова, а {} обозначает количество символов, которые будут найдены). Теперь, чтобы найти нужную часть, нужно вызвать string.match(regExp), чтобы получить все захваченные результаты. Он возвращает массив со всей захваченной строкой, за которой следуют все группы захвата в regExp (которые обозначены ()). Таким образом, в этом случае вы получите код страны с find[1], который является первой и единственной группой захвата регулярного выражения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...