将字符串前面和后面的字符串替换为关键字+值

时间:2016-07-20 05:52:07

标签: ruby regex

使用Ruby,在我想要替换的字符串中

something...
specialstring=360256
something...

something...
<script src="https://gist.github.com/someuser/360256.js"></script>
something...

我相信它可以用正则表达式(也许是gsub)完成,但我恐怕我不是那么精通。

编辑:“某事......”表示不应更改的文字。我想替换

的所有实例
specialstring=10000

用字符串中的下面(提取数字)

<script src="https://gist.github.com/someuser/10000.js"></script>

10000可以是换行符终止的任何数字。

2 个答案:

答案 0 :(得分:1)

▶ input = %|something...
▷ specialstring=360256
▷ something...|
#⇒ "something...\nspecialstring=360256\nsomething..."
▶ out_tmpl = '<script src="https://gist.github.com/someuser/%{tmpl}.js"></script>'
▶ puts input.gsub(/^specialstring=(.*)$/) { out_tmpl % { tmpl: $1.strip }}
#⇒ something...
#  <script src=\"https://gist.github.com/someuser/360256.js\"></script>
#  something...

这是一个或多或少的通用解决方案,它解析specialstring=ANYTHING出现的输入,然后使用字符串格式化,将此ANYTHING注入模板,替换原始模式。

答案 1 :(得分:0)

我自己不是红宝石专家,但我会试一试。

如果something...是您的搜索模式并希望替换其中的任何内容,请将其用作匹配的正则表达式进行替换:

/(?<=something\.\.\.)[\s\r\n]*(.+?)[\s\r\n]*(?=something\.\.\.)/

但是,如果specialstring=360256是你想要的并且想要替换它,那么根据另一个答案,这就是你的正则表达式:

/specialstring=360256/

都使用http://rubular.com/

进行了测试

更新1

是的,现在就明白了:

"something­...\nspeci­alstring=3­60256\nsom­ething..."­.gsub(/spe­cialstring­=(\d+)/, '<script src="­https://gist.githu­b.com/some­user/\1.js­"></script­>')