首页 > 解决方案 > 如何用 gsub 在 Ruby 中编写替换方法?

问题描述

所以我在 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- 

标签: javascriptregexrubygsub

解决方案


您可以使用

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

查看Ruby 演示

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

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


推荐阅读