【问题标题】:replace string url in certain path替换特定路径中的字符串 url
【发布时间】:2021-02-11 22:59:31
【问题描述】:

我有图片链接

link = "https://ecs7.sandal.net/img/cache/500-square/product-10/2019/6/16/719184/719184_de07958e-9e6b-491a-ae61-2291220be643_1080_1080.jpg"

/img/cache 后面 500 平方的路径就是图片的大小。

链接是动态的。但大小总是在缓存/路径之后。

尺寸路径后面的链接是产品文件夹,可以忽略。

500 平方对于我想要的图像来说太小了。所以我必须更改为 900 或其他尺寸。

所以链接如下所示

https://ecs7.sandal.net/img/cache/900/product-10/2019/6/16/719184/719184_de07958e-9e6b-491a-ae61-2291220be643_1080_1080.jpg

如何使用 ruby​​ 字符串将 500-square 替换为 900?

谢谢

【问题讨论】:

  • 你只是想替换数字还是要确保它也在 img/cache/ 之后?
  • 是的,只有数字,从 500 平方到 900,只是缓存/和 /product 之间的斜线。其余的不需要更改。我尝试拆分,但如果我重新加入,我会丢失 /。谢谢@SaraTibbetts
  • 您可以使用arr.join("/") 重新添加斜线
  • 天哪,它有效,谢谢@SaraTibbetts。我没有考虑到这一点。你应该回答它,这样我才能接受,或者不接受,取决于你。不过还是谢谢
  • link['500-square'] = '900' 会起作用。

标签: ruby


【解决方案1】:

替换整个子字符串

有很多方法可以做到这一点,具体取决于您的数据有多少变化以及它的结构如何。但是,如果您知道您的 link 变量总是想要替换子字符串 500-square,那么您可以简单地使用 String#sub 来替换该值。例如:

# replace entire substring
link.sub '500-square', '900'
#=> "https://ecs7.sandal.net/img/cache/900/product-10/2019/6/16/719184/719184_de07958e-9e6b-491a-ae61-2291220be643_1080_1080.jpg"

如果您不想弄乱正则表达式,这就是要走的路。此外,如果可能存在其他潜在匹配项,您仍然可以将表达式锚定到 URI 路径的一部分。例如:

# anchor expression with slashes
link.sub '/500-square/', '/900/'
#=> "https://ecs7.sandal.net/img/cache/900/product-10/2019/6/16/719184/719184_de07958e-9e6b-491a-ae61-2291220be643_1080_1080.jpg"

如果您需要关闭其他内容,例如 URL 中的位置或其他属性,那么您可能需要更复杂的解决方案。不过,上面的代码肯定会解决发布的用例。

【讨论】:

    【解决方案2】:

    可以在“/”上拆分字符串

    link_list = link.split("/") 
    

    然后你可以替换“500-square”

    link_list[link_list.index("500-square")] = "900" 
    

    然后将它与“/”连接在一起

    link = link_list.join("/") 
    

    【讨论】:

    • 有什么理由创建一个临时数组,而不是简单地直接使用字符串?如果字符串中不存在"500-square",则此代码将失败。不过,这可能是一项功能。
    • 我这样做纯粹是基于 OP 所说的他们在 cmets 中所做的事情以及他们尝试过的事情没有奏效
    • 那么从教学的角度来看是有道理的。您可能只想补充一点,可以直接使用字符串实现相同的结果。
    猜你喜欢
    • 1970-01-01
    • 2011-01-20
    • 2017-09-07
    • 2019-09-04
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多