【问题标题】:Problems with RegEx with Javascript使用 Javascript 的 RegEx 问题
【发布时间】:2015-12-27 10:52:16
【问题描述】:
else if( (m = url.match(/^(https?:\/\/ww[\d]+\.sinaimg\.cn\/)([^\/]+)(\/.+)$/i)) ) {
    if(m[2] != "large") {
        document.location = m[1] + "large" + m[3];
    }
}

所以上面是 Javascript 的一个工作片段......我正在尝试制作另一个适合代码的 URL 的正则表达式......但我似乎无法完全理解它是如何工作的......

什么是m[1]m[3] BTW?

这是我打算更改的网址:

a.up.w.com/i/EF8W-P67s6dqRPIj7cLlMQ!/fw/300/format/jpg/quality/90

如何制作一个正则表达式,将 300 替换为 3000、将 jpg 替换为 png(或不替换)以及将 90 替换为 100? 我做了这个,但似乎没有任何效果......

else if( (m = url.match(/^(https?:\/\/a\+\.up\.w\.com\/i\/)([^\/]+)(\/fw\/)([^\/]+)(\/format\/)([^\/+])(\/quality\/+)([^\/]+)$/i)) ) {

非常感谢!!!

【问题讨论】:

    标签: javascript regex url


    【解决方案1】:

    /^(https?://ww[\d]+.sinaimg.cn/)([^/]+)(/.+)$/i

    要阅读正则表达式,大多数人需要一些自动化工具作为助手。 我用一个例子创建了你的正则表达式:https://regex101.com/r/mP5zI9/3

    示例捕获链接:https://ww1.sinaimg.cn/aaa/bbb.jpg 1.https://ww1.sinaimg.cn/ 2.aaa 3./bbb.jpg

    m 数组包含匹配的不同部分。

    有关完整的 javascript 详细信息,请参阅:MDN documentation for String.prototype.match()

    【讨论】:

    • 我之前尝试过使用它,现在我的 RegEx 似乎很好:(https?:\/\/a+\.up+\.w+\.com\/i\/+)([^\ /]+)(\/fw\/+)([^\/]+)(\/格式\/+)([^\/+]+)(\/质量\/+)([^\/ ]+)
    • else if( (m = url.match(/^(https?:\/\/a+\.up+\.w+\.com\/i\/+)([^\/ ]+)(\/fw\/+)([^\/]+)(\/格式\/+)([^\/+]+)(\/质量\/+)([^\/] +)$/i)) ) { if(m[4] != "3000" || m[8] !=100) { document.location = m[1] + m[2] + m[3] + “3000”+m[5]+m[6]+m[7]+“100”; } }
    【解决方案2】:

    您可能会以错误的方式处理此问题。有时分解任务更容易。

    url = "http://a.up.w.com/i/EF8W-P67s6dqRPIj7cLlMQ!/fw/300/format/jpg/quality/90";
    m = url.replace(
        /\/fw\/\d+/,"/fw/3000"
    ).replace(
        /\/format\/jpg/,"/format/png"
    ).replace(
        /\/quality\/\d+/,"/quality/100"
    );
    

    【讨论】:

    • 但是如果“EF8W-P67s6dqRPIj7cLlMQ!”怎么办?是随机字符串吗?
    • 那又怎样?除非它恰好包含/fw/123?它可能不会,因为我非常怀疑标识符会包含/ - 这会导致原始来源出现问题!
    【解决方案3】:

    可能你只需要关心这部分/300/format/jpg/quality/90

    然后像这样使用替换。

    url.replace(/(\d+)\/format\/jpg\/quality\/(\d+)/, function($0, $1, $2) { 
        return 3000 + '/format/png/quality/' + 100; 
    }
    

    【讨论】:

      【解决方案4】:
      else if( (m = url.match(/^(https?:\/\/a+\.up+\.w+\.com\/i\/+)([^\/]+)(\/fw\/+)([^\/]+)(\/format\/+)([^\/+]+)(\/quality\/+)([^\/]+)$/i)) ) {
          if(m[4] != "3000" || m[8] !=100) {
              document.location = m[1] + m[2] + m[3] + "3000" + m[5] + m[6] + m[7] + "100";
          }
      }
      

      谢谢大家!我懂了! :P 特别感谢@Lavi Avigdor 的启发(再次)

      【讨论】:

        猜你喜欢
        • 2020-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-04
        • 1970-01-01
        • 2021-03-28
        • 2020-03-11
        • 1970-01-01
        相关资源
        最近更新 更多