2017-03-07 103 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 –