如何查找包含特定字符的字符串并将其替换为HTML标记

时间:2019-08-13 18:16:46

标签: ruby-on-rails regex ruby ruby-on-rails-5

我想找到字符串中以@开头的所有单词,并将其更改为<a> HTML标记。

例如:

my_string = 'Hello @username this is your page'
# in my_string i want replace @username like:
@username => <a href='mysite.com/username'>@username</a>
# expected output => 
Hello <a href='mysite.com/username' >@username</a> this is your page

有想法吗?

2 个答案:

答案 0 :(得分:2)

您可以将String#gsub与正则表达式一起使用:

my_string = 'Hello @username this is your page'
my_string.gsub(/@(\w+)/,'<a href=\'mysite.com/\1\'>@\1</a>' )
#=> "Hello <a href='mysite.com/username'>@username</a> this is your page"

正则表达式说明:

    正则表达式中的
  • @\w+表示@和一个或多个单词字符(\w代表字母数字字符或下划线)
  • 正则表达式中的
  • (...)会在捕获组中捕获用户名,以后可以在替换中使用该用户名
  • 第二个\1参数中的
  • gsub指示gsub将第一个捕获组的内容放置在字符串的此位置-在本例中为用户名

答案 1 :(得分:1)

mrazza的回答做得很好。但是,如果您想避免使用正则表达式,我想它可能会有所帮助。

result = []
splitted_string = 'Hello @username this is your page'.split

splitted_string.each_with_index do |a, i|
  result << a
  if a.include? '@'
    result.insert(i, "<a href='mysite.com/username' >", a, "</a>")
          .delete_at(i + 3)
  end
end
p result.join(' ')
#=> "Hello <a href='mysite.com/username'>@username</a> this is your page"

基本上,您将字符串拆分为一个数组,对其进行迭代,如果找到@,则可以使用索引在其之间添加所需的元素。

如果您不想删除一个棘手的元素,可以在语句之间写以下行:

result.insert(i, "<a href='mysite.com/username' >")
result.insert(i + 2, "</a>")
相关问题