21

我正在我的应用程序中开发一种引用机制,例如,应该可以在评论表单中简单地键入 #26 以引用该主题的评论 26。
为了首先检查用户是否想要引用一个或多个评论,我在 current_user.comments.build 之后和 @comment.save 之前放置了一个 if 条件。
但是,只是为了让我的问题更笼统,更容易适应:

if @comment.content.include?(/\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i)

我想要这样的东西。该示例用于检查评论的内容是否包括电子邮件。但从逻辑上讲,我收到“无法将正则表达式转换为字符串”错误。

你怎么能做包括?带有正则表达式的rails方法?那么,要检查文本是否包含某种正则表达式格式的字符串?

或者控制器是此类正则表达式操作的错误位置?

4

3 回答 3

54

我用这种方式做红宝石正则表达式:

stringObj.match(/regex/)
于 2012-06-09T17:58:19.320 回答
9

还有

if @comment.content =~ /regex/

如果您有一系列以前的评论 @prev_comments 并想一次性替换它们,您可以:

pattern = /#(\d+)/

@comment.content.gsub(pattern) do 
  cur_match = Regexp.last_match
  idx = cur_match[1].to_i - 1
  @prev_comments[idx]
end

Trick 正在使用 Regexp.last_match 来获取当前匹配,这让我想知道它是否是线程安全的。显然,它

从以下更一般的字符串扩展中改编(窃取)

class String
  def js_replace(pattern, &block)
    gsub(pattern) do |_|
      md = Regexp.last_match
      args = [md.to_s, md.captures, md.begin(0), self].flatten
      block.call(*args)
    end
  end
end

来源:http: //vemod.net/string-js_replace

于 2012-06-09T23:59:25.723 回答
5

为了匹配 .include 的性质?

 stringObj.match(/regex/).present?

如果您使用 Rails(或 ActiveSupport),会给出类似的真/假结果

于 2016-03-09T10:53:52.310 回答