ChatGPT解决这个技术问题 Extra ChatGPT

Javascript参考匹配组替换?

我有一个字符串,例如 hello _there_。我想使用 JavaScript 分别用 <div></div> 替换两个下划线。输出将(因此)看起来像 hello <div>there</div>。该字符串可能包含多对下划线。

我正在寻找的是一种在每场比赛上运行一个函数的方法,就像 Ruby 那样:

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

或者能够引用匹配的组,同样可以在 ruby 中完成:

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

有什么想法或建议吗?


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

哦,或者你也可以:

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

Javascript 是否使用 $1 而不是 \1?有人会提供文档链接吗?
replacementValue 可以是一个函数,并根据捕获组传递不同的参数?惊人!
我发现 \1 有效,但 $1 没有,尽管我使用的是 RegExp 变体:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
@CalculatorFeline 说“正则表达式本身”并不能确定是哪一个,因为有人可能正在尝试使用正则表达式进行替换。一定有很多人试图这样做:"hello _there_".replace(/_(.*?)_/, /<div>\1<\/div>/)
E
Eifion

您可以使用 replace 代替 gsub

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

您可以删除反斜杠。
M
Mohamed Allal

对于 $ 指定的替换字符串和替换模式。这里有一份简历:

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

文档链接:here

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

笔记:

如果您想在替换字符串中有一个 $,请使用 $$。与 vscode 代码段系统相同。