322

I have a string, such as hello _there_. I'd like to replace the two underscores with <div> and </div> respectively, using JavaScript. The output would (therefore) look like hello <div>there</div>. The string might contain multiple pairs of underscores.

What I am looking for is a way to either run a function on each match, the way Ruby does it:

"hello _there_".gsub(/_.*?_/) { |m| "<div>" + m[1..-2] + "</div>" }

Or be able to reference a matched group, again the way it can be done in ruby:

"hello _there_".gsub(/_(.*?)_/, "<div>\\1</div>")

Any ideas or suggestions?

3 Answers 3

534
"hello _there_".replace(/_(.*?)_/, function(a, b){
    return '<div>' + b + '</div>';
})

Oh, or you could also:

"hello _there_".replace(/_(.*?)_/, "<div>$1</div>")
Sign up to request clarification or add additional context in comments.

6 Comments

Does Javascript use $1 instead of \1? Would someone provide a link to documentation?
replacementValue can be a function and it is passed different arguments based on the catch groups? Amazing!
i found \1 worked but $1 did NOT although I am using the RegExp variation: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
@CalculatorFeline Saying "the regex itself" doesn't identify which one, as someone might be trying to use a regex for the replace. There must be many people trying to do this: "hello _there_".replace(/_(.*?)_/, /<div>\1<\/div>/).
|
52

You can use replace instead of gsub.

"hello _there_".replace(/_(.*?)_/g, "<div>\$1</div>")

1 Comment

You can remove the backslash.
31

For the replacement string and the replacement pattern as specified by $. here a resume:

enter image description here

link to doc : here

"hello _there_".replace(/_(.*?)_/g, "<div>$1</div>")



Note:

If you want to have a $ in the replacement string use $$. Same as with vscode snippet system.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.