【问题标题】:Ruby Regex : Replace tag typeRuby Regex:替换标签类型
【发布时间】:2013-09-06 09:03:40
【问题描述】:

所以从这个字符串:

str = 'Hello #{name}, you are now #{age}.'

我想要

"Hello <%= name %>, you are now <%= age =>"

我试过这个:

str.gsub(/\#{*}/, "<%= \1 %>")

但我不会工作。

【问题讨论】:

  • 看来你是在使用 Ruby 来修改 Ruby 源代码。这不是你的文本编辑器能做的吗?
  • 嗯,这更复杂。我有 .html.md 视图和使用这种技术的部分视图:stackoverflow.com/a/10131299/1620081 但我需要比&lt;%= %&gt; 更简单的方法来访问变量,因为非技术人员将编辑 .md 视图。我还想到了像 str = 'Hello {{name}}, you are now {{age}}.' 这样的小胡子语法我必须弄清楚这两种解决方案......无论如何,这只是一个正则表达式问题!
  • 是的,您绝对应该使用像 Mustache、Handlebars 或 Liquid 这样的模板语言。用户提供的内容不应传递给 ERB。

标签: ruby regex


【解决方案1】:

要捕获组,您必须用括号括住该部分。

str = 'Hello #{name}, you are now #{age}.'
str.gsub(/#\{(.*?)\}/, '<%= \1 %>')
# => "Hello <%= name %>, you are now <%= age %>."

而且,你必须逃避{},而不是#。 ({}在正则表达式中有特殊含义,而#则没有)。

【讨论】:

  • 为什么不是str.gsub('#{','&lt;%= ').gsub('}',' &gt;')? :)
  • @Babai 因为你可以有包含#{ 但不能包含} 的字符串,反之亦然。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-13
  • 1970-01-01
  • 2016-05-24
  • 2011-12-21
  • 2016-06-08
  • 1970-01-01
相关资源
最近更新 更多