[英]Language Code Stripping Regex
我覺得我已經很接近這里的解決方案了,但是我似乎還不太清楚。 我的目標是一次獲取一組字符串, [ 'en', 'en-us', 'en_us', 'zh-hans-TW' ]
並產生[ 'en', 'en', 'en', 'zh-hans' ]
。 我嘗試了幾種不同的方法,但是沒有完全正確的解決方案。
我相信,這是我最接近的匹配,除了“ en”。
/([a-zA-Z-_]+)[-_].+/
(一個或多個aA-zZ字符或-_,后跟-或_和其他字符)
我嘗試了負向超前(我不是很擅長),並提出了這個問題,它過度匹配並捕獲了整個字符串
/([a-zA-Z-_]+)(?![-_].+)/
(一個或多個aA-zZ字符或-_,后跟-或_和其他字符)
有人可以在這里指出正確的解決方案嗎?
除了匹配要保留的字符串部分,您可以刪除不想保留的字符串的結尾:
/[-_][a-z]+$/i
這是Javascript的實現:
var array1 = [ 'en', 'en-us', 'en_us', 'zh-hans-TW' ];
var array2 = array1.map(function(str) {
return str.replace(/[-_][a-z]+$/i, "");
});
console.log(array2);
輸出:
[ 'en', 'en', 'en', 'zh-hans' ]
您應該嘗試更籠統。 例如, de-DE-u-co-phonebk
也是有效的語言代碼(以-u...
開頭的內容代表排序規則等的Unicode選項)。 我假設您想從國家/地區代碼開始剝離所有內容,根據國家/地區代碼,該代碼應該是大寫的。 如果要使用正則表達式執行此操作,則
function strip_country_code(lang) { return lang.replace(/[-_][A-Z][A-Z].*$/, ''); }
當然,這將在en-us
上失敗,這是無效的; 應該是en-US
。 您必須決定是否以及如何處理這樣的無效語言代碼。
這只是您最好使用可用的庫來處理語言代碼的原因之一。 看一下JS國際化API ,它有幾種解析語言環境代碼並找到“最佳”方法的方法。 但是,瀏覽器支持有限。 因此,您可能想尋找現成的東西。 但目前我無法將手指放在任何東西上。
JED庫使用以下正則表達式提取段:
str.match(/[a-z]+/gi)
但是然后假設第二個細分市場(如果存在)始終是國家/地區,因此該邏輯在zh-hans-TW
上將失敗。
您還應該考慮誰將使用字符串操作的結果。 您是說有些庫或API 僅能處理國家/地區代碼前面的區域設置字符串嗎? 您應該確保確實如此。 例如,我相信moment.js還將正確處理不同的語言環境字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.