【问题标题】:Regex to extract city and city code from a dynamic URL in React正则表达式从 React 中的动态 URL 中提取城市和城市代码
【发布时间】:2021-03-17 07:18:52
【问题描述】:

我将 URL 存储在位置变量中,例如,这将是动态的。

1-https://abc.go.com/United_States,US/

2-https://abc.go.com/US/

3-https://abc.go.com/Uganda,UG/

4-https://abc.go.com/United_States,US

5-https://abc.go.com/

网址是完全动态的, 我能够使用以下正则表达式提取状态代码:-

const cityCode =location.split(/(?=[A-Z][A-Z])/)[1].split('/')[0];

//这将获得两个连续的大写字符并在最后删除“/”(如果存在)

如果存在于 url 中,是否有任何可能的正则表达式可以在单个变量中提取国家和州代码。

【问题讨论】:

    标签: javascript reactjs regex


    【解决方案1】:

    您可以使用带有可选部分的捕获组作为第一部分和逗号

    https?:\/\/\S+?\/((?:\w+,)?[A-Z][A-Z])
    
    • https?:\/\/将协议与可选s匹配
    • \S+?\/ 尽可能少匹配 1+ 个非空白字符
    • ( 捕获 group 1(在示例代码中由 m[1] 访问)
      • (?:\w+,)? 可选匹配 1+ 个单词字符和一个逗号
      • [A-Z][A-Z] 匹配 2 个大写字符
    • )关闭第一组

    Regex demo

    const pattern = /https?:\/\/\S+?\/((?:\w+,)?[A-Z][A-Z])/;
    [
      "https://abc.go.com/United_States,US/",
      "https://abc.go.com/US/",
      "https://abc.go.com/Uganda,UG/",
      "https://abc.go.com/United_States,US",
      "https://abc.go.com/"
    ].forEach(s => {
      const m = s.match(pattern);
      console.log(m ? m[1] : "no match");
    });

    或者如果是第一个正斜杠之后的部分

    https?:\/\/[^\s\/]+\/((?:\w+,)?[A-Z][A-Z])
    

    Regex demo

    【讨论】:

    【解决方案2】:

    参考:String.prototype.match()

    urls = ['https://abc.go.com/United_States,US/',
      'https://abc.go.com/US/',
      'https://abc.go.com/Uganda,UG/',
      'https://abc.go.com/United_States,US',
      'https://abc.go.com/'
    ];
    urls.forEach(url => {
      console.log(url.match(/.*:\/\/.*?\/(.*)/m)[1].replace(/\/$/, ''))
    });

    【讨论】:

    • 你能告诉每个表达式在这个查询中的作用吗
    【解决方案3】:
    var pathName = location.pathname;
    var countryCode = (pathName.split('/')).length!= 0 ? pathName.split('/')[1].split(',') : [];
    console.log(countryCode);
    
    
    // if the Window URL is - "https://test.org/United_States,US" then result is - ["United_States", "US"]
    
    // if the Window URL is - "https://test.org/United_States" then result is - ["United_States"]
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    相关资源
    最近更新 更多