【问题标题】:Javascript replace with reference to matched group?Javascript参考匹配组替换?
【发布时间】: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>")

有什么想法或建议吗?

【问题讨论】:

    标签: javascript regex


    【解决方案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;/).
    【解决方案2】:

    您可以使用replace 代替gsub

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

    【讨论】:

    • 你可以去掉反斜杠。
    【解决方案3】:

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

    文档链接:here

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



    注意:

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

    【讨论】:

      猜你喜欢
      • 2012-05-01
      • 2018-05-11
      • 2010-10-29
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多