在特定字符后将字符串插入URL

时间:2015-03-10 21:23:06

标签: ruby regex string

我有一个网址字符串:

http://ip-address/user/reset/1/1379631719drush/owad_yta75

我需要插入一个短字符串:

在第三次出现“/”之后

help,以便新字符串为:

http://ip-address/**help**/user/reset/1/1379631719drush/owad_yta75

我不能使用Ruby的string.insert(#, 'string'),因为IP地址的长度并不总是一样。

我正在考虑使用正则表达式来做到这一点,但我不确定如何找到第三个'/'出现。

3 个答案:

答案 0 :(得分:3)

一种方法:

url = "http://ip-address/user/reset/1/1379631719drush/owad_yta75"
url.split("/").insert(3, 'help').join('/')
# => "http://ip-address/help/user/reset/1/1379631719drush/owad_yta75"

答案 1 :(得分:2)

你可以使用这样的正则表达式捕获组:

(.*?//.*?/)(.*)
  ^   ^     ^- Everything after 3rd slash
  |   \- domain
  \- protocol

<强> Working demo

并使用以下替代品:

\1help/\2

如果您查看Substitution部分,则可以看到预期的输出

enter image description here

答案 2 :(得分:2)

您忘记的是,URL只是一个主机加上资源的文件路径,因此您应该利用专门用于处理这些工具的工具。虽然起初它看起来似乎不直观,但从长远来看它会更好。

require 'uri'

url = 'http://ip-address/user/reset/1/1379631719drush/owad_yta75'
uri = URI.parse(url)
path = uri.path # => "/user/reset/1/1379631719drush/owad_yta75"
dirs = path.split('/') # => ["", "user", "reset", "1", "1379631719drush", "owad_yta75"]
uri.path = (dirs[0,1] + ['help'] + dirs[1 .. -1]).join('/')

uri.to_s # => "http://ip-address/help/user/reset/1/1379631719drush/owad_yta75"