gpt4 book ai didi

ruby-on-rails - ruby (Rails) gsub : pass the captured string into a method

转载 作者:数据小太阳 更新时间:2023-10-29 07:46:21 25 4
gpt4 key购买 nike

我正在尝试匹配这样的字符串:

text = "This is a #hastag"
raw(
h(text).gsub(/(?:\B#)(\w*[A-Z]+\w*)/i, embed_hashtag('\1'))
)

def embed_hashtag('data')
#... some code to turn the captured hashtag string into a link
#... return the variable that includes the final string
end

我的问题是,当我在使用 gsub 调用的 embed_hashtag 方法中传递 '\1' 时,它只是按字面意思传递 "\1",而不是从我的正则表达式中捕获的第一个组。有替代方案吗?

仅供引用:

  1. 我将文本包装在 h 中以转义字符串,但随后我将代码嵌入到需要原始传递的用户输入文本(即主题标签)中(因此 原始).

  2. 将“#”符号与文本分开很重要,这就是我认为我需要捕获组的原因。

  3. 如果您有更好的方法,请不要犹豫告诉我,但我仍然想要一个答案,以便回答问题,以防其他人有这个问题。

最佳答案

  • 使用 block 形式 gsub(regex){ $1 } 而不是 gsub(regex, '\1')
  • 您也可以将正则表达式简化为 /\B#(\w+)/i
  • 你可以省略 h() 助手,Rails 4 默认会逃避恶意输入
  • 将方法参数指定为 embed_hashtag(data) 而不是 embed_hashtag('data')
  • 您需要在进行替换之前定义embed_hashtag
  • 要建立链接,您可以使用link_to(text, url)

这应该可以解决问题:

def embed_hashtag(tag)
url = 'http://example.com'
link_to tag, url
end

raw(
text.gsub(/\B#(\w+)/i){ embed_hashtag($1) }
)

关于ruby-on-rails - ruby (Rails) gsub : pass the captured string into a method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24230877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com