ChatGPT解决这个技术问题 Extra ChatGPT

Javascript replace with reference to matched group?

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?


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

Oh, or you could also:

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

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>/).
E
Eifion

You can use replace instead of gsub.

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

You can remove the backslash.
M
Mohamed Allal

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

https://i.stack.imgur.com/ynEua.png

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.