簡體   English   中英

語言代碼剝離正則表達式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM