Замена регулярных выражений Javascript

#regex

#регулярное выражение

Вопрос:

У меня есть выпадающий список langauge и функция javascript, которая изменяет страницу на соответствующий выбранный язык. Мне нужна помощь в замене моего регулярного выражения:

Например, я хотел бы, чтобы этот URL превратился в этот URL: http://localhost:7007/en/Product/Detail/1038 http://localhost: 7007/fr/Продукт/Подробная информация/1038

   function languageChange(sender) {
    var lang = $(sender).val();

    var target = window.location.href;
    target = target.replace(/(http://.*?)([a-zA-Z]{2})(.*$)/gim, '$1'   lang   '$3');


    window.location = target;
}
  

Ответ №1:

Ваш URL-адрес всегда имеет одну и ту же структуру? Если это так, возможно, вам вообще не нужно регулярное выражение. Разделите URL-адрес на каждый «/», замените индекс 3, затем снова объедините ваш массив в together с помощью «/».

Вот пример кода:

 function changeLanguage(url, newLang) {
    var url = url.split('/');
    url[3] = newLang;
    return url.join('/');
}
changeLanguage('http://localhost:7007/en/Product/Detail/1038','Fr');
  

Примечание: изначально я написал «splice» вместо «join» в своем ответе. Объединение — это правильный метод.

Ответ №2:

Вот функция, которая обрабатывает любое количество URL-адресов в строке и заменяет языковую часть (первую часть path), только если она существует и имеет длину от 2 до 4 символов:

 function changeLanguage(text, lang) {
    return text.replace(
        /b(w ://[^/] /)[A-Z]{2,4}(?=[/s]|$)/gim,
        '$1'   lang);
}
  

Редактировать: преобразовано в формат функции.

Ответ №3:

Используйте это регулярное выражение:

 target =
    target.replace(/(https?://[^/] )/?([^/]*)(.*)/gi, '$1/'   lang   '$3');
  

если, например, lang='fr' then target содержит http://localhost:7007/fr/Product/Detail/1038 значение;

Комментарии:

1. Это регулярное выражение: /(https?://[^/] /?)([^/] )(.*)/gim не работает, если URL-путь пуст. (Регулярное выражение не требует / ) Учитывая URL: http://localhost:7007 это возвращает http://localhost:700fr .