JavaScript中如何使用匹配组进行替换?

314

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

有什么想法或建议吗?

3个回答

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

哦,你还可以这样做:

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

13
JavaScript使用$1而不是\1吗?有人可以提供相关文档的链接吗? - daveloyall
3
“replacementValue”可以是一个函数,并且根据捕获组传递不同的参数?太棒了! - daveloyall
6
我发现\1有效,但$1无效,尽管我正在使用RegExp变量:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#grouping-back-references - jsh
1
那是在正则表达式本身。人们正在谈论替换字符串。 - CalculatorFeline
2
@CalculatorFeline 说“正则表达式本身”并不能确定是哪一个,因为有些人可能正在尝试使用正则表达式进行替换。肯定有很多人正在尝试这样做:"hello _there_".replace(/_(.*?)_/, /<div>\1<\/div>/) - Stewart
6
有关函数 replace 的文档:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/replace#%E7%94%A8%E5%87%BD%E6%95%B0%E4%BD%9C%E4%B8%BA%E5%8F%82%E6%95%B0。 - Naramsim

51
你可以使用replace代替gsub
"hello _there_".replace(/_(.*?)_/g, "<div>\$1</div>")

28
你可以删除反斜杠。 - CalculatorFeline

26
$所指定的替换字符串和替换模式。 文档链接:这里。以下是一份简历:

enter image description here

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



注意:

如果您想在替换字符串中使用$,请使用$$。与VS Code片段系统相同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接