Javascript参考匹配组替换?

Posted

技术标签:

【中文标题】Javascript参考匹配组替换?【英文标题】:Javascript replace with reference to matched group? 【发布时间】:2010-11-17 02:37:19 【问题描述】:

我有一个字符串,例如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>")

有什么想法或建议吗?

【问题讨论】:

【参考方案1】:
"hello _there_".replace(/_(.*?)_/, function(a, b)
    return '<div>' + b + '</div>';
)

哦,或者你也可以:

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

由 Liran H 编辑: 对于包括我在内的其他六个人,$1 不起作用,而 \1 起作用。

【讨论】:

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

您可以使用replace 代替gsub

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

【讨论】:

你可以去掉反斜杠。【参考方案3】:

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

文档链接:here

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

注意:

如果您想在替换字符串中包含$,请使用$$。与 vscode sn-p 系统相同。

【讨论】:

以上是关于Javascript参考匹配组替换?的主要内容,如果未能解决你的问题,请参考以下文章

吃通javascript正则表达式

仅替换文件中多次出现的匹配组

如何用正则表达式替换多个匹配项/组?

如何用元组列表替换列表中正则表达式匹配的模式?

JavaScript 替换所有匹配内容

如何替换 Javascript 中的正则表达式子字符串匹配?