正则表达式:如果在路径中找到特定的字符串模式,则重新调整 url 路径



我没有太多使用正则表达式和努力解决问题的经验: 我有一个如下所示的网址:

http://example.com/ja-JP/blog/12345

我想将上面的网址重定向到下面的网址:

http://jp.example.com/ja/blog/12345

此外,我想使用 aws ALB 重定向规则进行重定向。 我将不得不使用不同的国家/地区设置模式执行相同的 URL 重定向。 例如en-BZ,en-CA。

我需要帮助如何捕获语言-国家/地区部分并修改源 URL?

这是匹配语言和国家/地区的正则表达式:

/(?<lang>[a-z]{2})-(?<country>[A-Z]{2})/  

这是示例

[a-z] 表示小写字母,[a-z]{2}

对于两个小写字母,(?[a-z]{2}(将其设为一个组并将其命名为"lang",然后是破折号"-",两个大写字母分组并命名为"country",并包含在两个"/"中

既然我不知道你的开发语言是什么,那就说是PHP,那么:

preg_match('//(?<lang>[a-z]{2})-(?<country>[A-Z]{2})//' ,$url, $matches);
// $matches['lang']='ja' $matches['country']='JP'
$url = preg_replace('//(?<lang>[a-z]{2})-(?<country>[A-Z]{2})//', '/'.$matches['lang'].'/', $url);
// $url = 'https://example.com/ja/blog/12345'
$url = preg_replace('/(https?://)/', '$1'.$matches['country'].'.', $url);
// $url = 'https://JP.example.com/ja/blog/12345'

(https?://( 匹配"http://"或"https://">

使用以下 JavaScriptRegular expressions可能会有所帮助:

/(example.com/[a-z]{2,})-([a-z]{2,})/i

以下是工作示例:

'http://example.com/ja-JP/blog/12345'.replace(/(example.com/[a-z]{2,})-([a-z]{2,})/i, '$2.$1');
// Outputs "http://JP.example.com/ja/blog/12345"
'http://example.com/en-BZ/blog/12345'.replace(/(example.com/[a-z]{2,})-([a-z]{2,})/i, '$2.$1');
// Outputs "http://BZ.example.com/en/blog/12345"

最新更新