roland
roland

Reputation: 617

Insert a string into an URL after a specific character

I have a URL string:

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

into which I need to insert a short string:

help after the third occurance of "/" so that the new string will be:

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

I cannot use Ruby's string.insert(#, 'string') since the IP address is not always the same length.

I'm looking at using a regex to do that, but I am not exactly sure how to find the third '/' occurance.

Upvotes: 1

Views: 437

Answers (3)

the Tin Man
the Tin Man

Reputation: 160551

The thing you're forgetting is that a URL is just a host plus file path to a resource, so you should take advantage of tools designed to work with those. While it'll seem unintuitive at first, in the long run it'll work better.

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"

Upvotes: 2

Federico Piazza
Federico Piazza

Reputation: 30995

You can do that with capturing groups using a regex like this:

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

Working demo

And use the following replacement:

\1help/\2

If you check the Substitution section you can see your expected output

enter image description here

Upvotes: 2

victorkt
victorkt

Reputation: 14562

One way to do this:

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"

Upvotes: 3

Related Questions