【问题标题】:How to write replace method in Ruby with gsub?如何用 gsub 在 Ruby 中编写替换方法?
【发布时间】:2020-10-16 06:07:11
【问题描述】:

所以我在 JS 中有这个函数,我想用 Ruby 编写它,有什么想法吗?

arr = "### ### Lorem.  "
arr.replace(/(#+) (.*)/g, (_, h, t) => `<h${h.length}>${t}</h${h.length}>`)

我在努力

arr.gsub( /(?<lvl>\#{1,6})(?<text>.*)/){ |m| "#{m[:lvl]} #{m[:text]}"} 

错误:

Traceback (most recent call last):
     8: from /Users/mereynurlan/.rvm/rubies/ruby-2.6.3/bin/irb:23:in `<main>'         
     7: from /Users/mereynurlan/.rvm/rubies/ruby-2.6.3/bin/irb:23:in `load'         
     6: from /Users/mereynurlan/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/irb- 

【问题讨论】:

  • 请分享失败的代码。
  • 你是什么意思?@WiktorStribiżew
  • 如果你问的是我尝试过的代码有数百万个,所以我在这里问问题。
  • 给你@WiktorStribiżew arr.gsub( /(?&lt;lvl&gt;\#{1,6})(?&lt;text&gt;.*)/){ |m| "#{m[:lvl]} #{m[:text]}"} Traceback (most recent call last): 8: from /Users/mereynurlan/.rvm/rubies/ruby-2.6.3/bin/irb:23:in `&lt;main&gt;' 7: from /Users/mereynurlan/.rvm/rubies/ruby-2.6.3/bin/irb:23:in `load' 6: from /Users/mereynurlan/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/irb-
  • 请将完整的错误堆栈跟踪添加到问题中。

标签: javascript regex ruby gsub


【解决方案1】:

你可以使用

arr = arr.gsub(/(#+) (.*)/) { "<h#{$1.length}>#{$2}</h#{$1.length}>" } 

查看Ruby demo

(#+) (.*) 模式很简单:它将一个或多个哈希字符捕获到第 1 组中,然后匹配一个空格,并将行的其余部分匹配并捕获到第 2 组中。

"&lt;h#{$1.length}&gt;#{$2}&lt;/h#{$1.length}&gt;" 替换是双引号字符串文字,允许字符串插值。 #{$1.length}&gt;#{$2} 是内插的 $1.length$2,其中 $n 指的是捕获的子字符串。

【讨论】:

  • 是的,这就是我所缺少的,我写成 #{\2} 而不是 #{$2}
猜你喜欢
  • 2017-02-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-31
  • 1970-01-01
  • 1970-01-01
  • 2013-04-30
  • 1970-01-01
  • 2018-12-26
相关资源
最近更新 更多