我的方法获取带有一些urls的字符串。Urls可以仅包含ascii符号或其他任何符号:
"тест non-latin url http://url.cоm and test only-latin url https://url.com"我希望解析传入的字符串,然后更改原始字符串中的所有匹配项,如下所示:
"тест non-url <b>[NON-LATIN LETTERS: http://url.cоm]</b> and test only-latin url <a href="https://url.com">https://url.com</a>"并将其传递给下一个方法。
我在gsub!中使用了each
def validate_url(string)
validate_url = string.gsub(/((http|https):\/\/.*?)(\s|$|\n|\Z|\t|\r|<.)/)
validate_url.each do |link|
if link.ascii_only?
string.gsub!(link, "<a href=\"#{link}\">#{link}</a>")
else
string.gsub!(link, "<b>[NON-LATIN LETTERS: #{link}]</b>")
end
end
end我看到了RuntimeError: string modified错误,但不明白为什么以及如何修复它。
发布于 2018-12-25 22:00:04
无论出于什么原因,该字符串都拒绝修改。虽然我们还没有弄清楚原因,但下面是如何避免这个问题的:不要原地修改字符串,返回一个新的字符串。
def validate_url(string)
string.gsub(/((http|https):\/\/.*?)(\s|$|\n|\Z|\t|\r|<.)/) do |link|
if link.ascii_only?
"<a href=\"#{link}\">#{link}</a>"
else
"<b>[NON-LATIN LETTERS: #{link}]</b>"
end
end
end然后
clean = validate_url(string)https://stackoverflow.com/questions/53922952
复制相似问题