2017-03-07 106 views
1

根據我提交的URL,有兩個匹配項。他們是 「EN-GB」和「英國愛爾蘭正則表達式匹配來自URL的數據當有兩個匹配時,只返回1個匹配

網址:https://www.myabcalphabeta.com/en-gb/destinations/uk-ireland

但是,當我回到它返回只有最後一個功能,這是」英國愛爾蘭

我如何抓住第一場比賽「en-gb」。我也看到循環工作正常,因爲它返回兩個值。

控制檯輸出的屏幕截圖。 Screenshot of output in console.

$(document).ready(function(){ 
     function getURLLocale() { 
     var url = $(location).attr("href"); 
     var localeRegex = /^[a-z][a-z]-[a-z][a-z]/g; 
     var urlBreakdown = url.split("/"); 
     console.log(urlBreakdown); 
     var lang = "en"; 
     var country = "gb"; 

     for(var i = 0; i < urlBreakdown.length; i++) { 
      if(urlBreakdown[i].match(localeRegex)) { 
       lang = urlBreakdown[i].split("-")[0]; 
       country = urlBreakdown[i].split("-")[1]; 
       console.log(lang+ "\n"); 
      }; 
     } 

     return([lang, country]); 
    } // End function getURLLocale() 
    console.log(getURLLocale()); 
}) 
+0

做回值,而不是執行console.log當第一場比賽匹配任何可能的語言環境。 –

+0

放在數組中的所有巧合不僅是lasto,還是做前面的評論@YonghoonLee –

+0

@YonghoonLee沒有效果。 – Santosh

回答

0

你的表達是錯誤的:

更改正則表達式來^[a-z][a-z]-[a-z][a-z]$

Have a look

$(document).ready(function(){ 
     function getURLLocale() { 
     var url = "https://www.myabcalphabeta.com/en-gb/destinations/uk-ireland"; 
     var localeRegex = /^[a-z][a-z]-[a-z][a-z]$/g; 
     var urlBreakdown = url.split("/"); 
     console.log(urlBreakdown); 
     var lang = "en"; 
     var country = "gb"; 

     for(var i = 0; i < urlBreakdown.length; i++) { 
      if(urlBreakdown[i].match(localeRegex)) { 
       lang = urlBreakdown[i].split("-")[0]; 
       country = urlBreakdown[i].split("-")[1]; 
       console.log(lang+ "\n"); 
      }; 
     } 

     return([lang, country]); 
    } // End function getURLLocale() 
    console.log(getURLLocale()); 
}) 
+0

你的回答是正確的。你還可以解釋一下美元符號嗎?它是指最後一個搜索項目嗎?它是從右向左搜索方向嗎? – Santosh

+0

如何在twoletter-twoletter上匹配任何想法? – Santosh

+0

@Santosh'^ [a-z] [a-z] - [a-z] [a-z] $'是'twoletter-twoletter'。 '^'是字符串的開始,'$'是字符串的結尾。在上面提到的表達中,字符串應該從頭到尾匹配twoletter-twoletter。 –

1

我認爲你可以這樣做:

const url = `https://www.myabcalphabeta.com/en-gb/destinations/uk-ireland` 
 

 
const getUrlData = url => { 
 
    const en = url.match(/\ben-?\w*\b/) 
 
    const uk = url.match(/\buk-?\w*\b/) 
 
    const result = [] 
 
    if (en) result.push(en[0]) 
 
    if (uk) result.push(uk[0]) 
 
    return result 
 
} 
 

 
console.log(getUrlData(url))

或者這

const url = `https://www.myabcalphabeta.com/en-gb/destinations/uk-ireland` 
 

 
const getUrlData = url => { 
 
    const regex = /\b[a-z]{2}-[a-z]*\b/g 
 
    const result = [] 
 
    let temp 
 

 
    while (temp = regex.exec(url)) { 
 
    result.push(temp[0]) 
 
    } 
 
    return result 
 
} 
 
console.log(getUrlData(url))

這將選擇任何部分,按2 [a-z] thath必須啓動字 - 和所有[a-z]直到不​​字

1

要從url獲取所有語言環境與正則表達式(\w{2}-\w{2,})

$(document).ready(function() { 
    function getURLLocale() { 
     var url = 'https://www.myabcalphabeta.com/en-gb/destinations/uk-ireland'; 
     var m; 
     var regex = /(\w{2}-\w{2,}(-\w{2})?)/g; 
     var locales = []; 

     while (m = regex.exec(url)) { 
      locales.push(m[0]); 
     } 

     return locales; 
    } // End function getURLLocale() 
    console.log(getURLLocale()); 
}); 

該數組將包含兩個語言環境。如果你只想得到第一個,而不是getURLLocale(),請打印getURLLocale()[0]

編輯

我改變了正則表達式來(\w{2}-\w{2,}(-\w{2})?),這樣你就可以從this列表

+0

所以這是www.awwwards.com/websites/e-commerce電子商務國家:D –

+0

謝謝@MaciejKozieja:P –

相關問題