#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
.