我尝试用字符串中的example.com
替换所有<a href="http://example.com">example.com</a>
个实例:
content.gsub(/example\.com/, '<a href="http://example.com">example.com</a>')
但如果前面有一个点,我就不想替换example.com
,就像在www.example.com
中一样。所以我的第一个想法是制作正则表达式/[^\.]example.com/
。但是,当然,gsub!
也会替换example.com
之前的字符。
在Ruby中,是否有一种简单的方法可以替换前面没有example.com
的所有.
?
答案 0 :(得分:2)
我会以负面的观察结果来做这件事:
content.gsub(/((?<!\.)example.com)/i , '<a href="http://\1">\1</a>')
表示(?<!\.)
的部分字面意思是“如果之前没有.
”。
负面的后视是零宽度断言,所以它不是匹配的一部分,因此不会被替换。
请注意,这些仅在Ruby 1.9 +
中受支持此示例还捕获域本身,以便可以在替换中使用它,这样可以轻松地将其与变量交换,并使其不区分大小写(通过使用/i
结束表达式)只因为它对我更有意义。
答案 1 :(得分:1)
您可以在back reference
中使用gsub
:
content.gsub(/(^|[^.])example\.com/, '\\1<a href="http://example.com">example.com</a>')
(^|[^.])
将匹配输入或非点字符的开头。