我想找到字符串中以@
开头的所有单词,并将其更改为<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
有想法吗?
答案 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>")