zanona
zanona

Reputation: 12727

Ruby replace text within single quotes or backticks for html tag

Hello I am trying to build a simple action in Ruby that takes one string like

result = "This is my javascript variable 'var first = 1 + 1;' and here is another 'var second = 2 + 2;' and that's it!"

So basically I would like to take the text within single quotes ' or backticks ` and and replace it by:

<code>original text</code> note I'm replacing it by an opening and closing code tag

Just like in markdown

so I would have a result like

result = "This is my javascript variable <code>var first = 1 + 1;<code> and here is another <code>var second = 2 + 2;</code> and that's it"

If it's possible to run this natively without the need of any extra gem it would be great :)

Thanks a lot

Upvotes: 1

Views: 1522

Answers (3)

Tilo
Tilo

Reputation: 33752

You will need to come-up with a character as a delimiter for your code, which you don't use otherwise..

Why? because of all the corner cases. E.g. the following string

result = "This's my javascript variable 'var first = 1 + 1;' and here is another 'var second = 2 + 2;' and that's it!"

which would otherwise produce:

"This<code>s my javascript variable </code>var first = 1 + 1;<code> and here is another </code>var second = 2 + 2;<code> and that</code>s it!"

Total garbage out..

However if you use a unique character as a delimiter that's otherwise not used, you can create a non-greedy RegExp which will do the search/replace

e.g. using a # character to delimit the code:

  "This's my javascript variable #var first = 1 + 1;# and here is another #var second = 2 + 2;# and that's it!"

Upvotes: 1

DarkDust
DarkDust

Reputation: 92422

I guess you'll need to iterate the string and parse it. While you can do non-greedy regex matches, e.g. result.gsub!(/'([^']*)'/, '<code>\1</code>') you might find the result might not behave correctly in corner-cases.

Upvotes: 2

kurumi
kurumi

Reputation: 25609

Without any other advanced requirement

>> result.gsub(/\s+'/,"<code>").gsub(/'\s+/,"</code>")
=> "This is my javascript variable<code>var first = 1 + 1;</code>and here is another<code>var second = 2 + 2;</code>and that's it!"

Upvotes: 1

Related Questions