首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我尝试gsub时,"RuntimeError: string modified“!每个内的传入字符串

当我尝试gsub时,"RuntimeError: string modified“!每个内的传入字符串
EN

Stack Overflow用户
提问于 2018-12-25 21:46:00
回答 1查看 91关注 0票数 0

我的方法获取带有一些urls的字符串。Urls可以仅包含ascii符号或其他任何符号:

代码语言:javascript
复制
"тест non-latin url http://url.cоm and test only-latin url https://url.com"

我希望解析传入的字符串,然后更改原始字符串中的所有匹配项,如下所示:

代码语言:javascript
复制
"тест 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

代码语言:javascript
复制
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错误,但不明白为什么以及如何修复它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-25 22:00:04

无论出于什么原因,该字符串都拒绝修改。虽然我们还没有弄清楚原因,但下面是如何避免这个问题的:不要原地修改字符串,返回一个新的字符串。

代码语言:javascript
复制
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

然后

代码语言:javascript
复制
clean = validate_url(string)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53922952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档