tybro0103
tybro0103

Reputation: 49743

Find and replace variable in Ruby string

Let's say I have a string like so:

"Lorem ipsum de color [post]57[/post] sit amet [post]103[/post] desectator."

I want to find all occurrences of [post]*[/post] and replace it with the title of the post represented by the number. I'd end up with something like so:

"Lorem ipsum de color Angry Turtle sit amet Fuzzy Rabit desectator."

I'm guessing a regex will be needed... looking for what the regex would be and how to use.

Upvotes: 1

Views: 1772

Answers (2)

steenslag
steenslag

Reputation: 80105

(after reading your easier syntax comment) If you have a hash like

posts = {57 => "Angry Turtle", 103 => "Fuzzy Rabit"}

or an array like, ehm,

posts = []
posts[57] = "Angry Turtle"
posts[103] = "Fuzzy Rabbit"

then why not go for string interpolation?

"Lorem ipsum de color #{posts[57]} sit amet #{posts[103]} desectator."

And you're ready to go.

Upvotes: 2

jwarchol
jwarchol

Reputation: 1916

The gsub method on String has a handy block variation that works well here:

>> s = "Lorem ipsum de color [post]57[/post] sit amet [post]103[/post] desectator."
=> "Lorem ipsum de color [post]57[/post] sit amet [post]103[/post] desectator."

>> posts = {"57" => "Angry Turtle", "103" => "Fuzzy Rabit"}
=> {"57"=>"Angry Turtle", "103"=>"Fuzzy Rabit"}

>> s.gsub(/\[post\](\d+)\[\/post\]/) {|m| posts[$1] }
=> "Lorem ipsum de color Angry Turtle sit amet Fuzzy Rabit desectator."

Your syntax couldn't be much less regex friendly though. Try not to use brackets and slashes.

Upvotes: 7

Related Questions