Javascript 给定一个特定的日期,有没有一种方法可以在自由文本文档中搜索该日期,而不知道该日期是以何种格式编写的?

Javascript 给定一个特定的日期,有没有一种方法可以在自由文本文档中搜索该日期,而不知道该日期是以何种格式编写的?,javascript,ruby,date,full-text-search,pattern-matching,Javascript,Ruby,Date,Full Text Search,Pattern Matching,假设我有一个特定的日期,比如2013年1月10日 我希望能够搜索文本或html文档,看看它是否包含对该日期的引用。我想用多种格式中的任何一种来说明日期,例如: 1/10/2013 01/10/13 2013-01-10 10-Jan-2013 January 10, 2013 Jan 10, 2013 。。。应为2013年1月10日生成(+)匹配结果 我认识到交换日-月订单可能有问题,但我愿意接受这种情况下的假阳性结果,即: 01-10-2013 10-01-2013 。。。

假设我有一个特定的日期,比如2013年1月10日

我希望能够搜索文本或html文档,看看它是否包含对该日期的引用。我想用多种格式中的任何一种来说明日期,例如:

1/10/2013  
01/10/13  
2013-01-10
10-Jan-2013  
January 10, 2013  
Jan 10, 2013
。。。应为2013年1月10日<代码>生成(+)匹配结果

我认识到交换日-月订单可能有问题,但我愿意接受这种情况下的假阳性结果,即:

01-10-2013
10-01-2013
。。。就我而言,这两种情况在2013年1月10日都可以接受

是否有一种已建立的算法用任何语言实现,可以执行这种广义但非平凡的搜索?我的首选是Ruby或JavaScript,但我对任何经过深思熟虑的示例都感兴趣。 增编#1

我看到这个代码:

def validate_date(date_str)
  valid_formats = ["%m/%d/%Y", "%m/%d/%Y %I:%M %P"] 
  #see http://www.ruby-doc.org/core-1.9.3/Time.html#method-i-strftime for more

  valid_formats.each do |format|
    valid = Time.strptime(date_str, format) rescue false

    return true if valid
  end

  return false
end


。。。这将是处理日期数字表示的好方法。这使得月份的名字下落不明。由于1月、1月、1月和1月都代表一年中的第一个月,我想知道在其他地方是否已经很好地处理了大量的排列。

我不知道有任何预先存在的解决方案,但编写自己的解决方案并不复杂。创建一个要搜索的日期格式数组,然后简单地迭代这些格式,格式化日期并搜索文档:

require 'date'

formats = ["%-m/%e/%Y",
           "%m/%d/%Y",
           "%Y-%m-%d",
           "%d-%b-%Y",
           "%B %d, %Y",
           "%b %d, %Y"]

d = Date.new(2013, 1, 10)

formats.each do |format|
  search_string = d.strftime(format)
  # Do your search for `search_string`
end
更新:更复杂、更有效的方法是将搜索字符串转换为Regexp:

require 'date'

formats = ["%-m/%e/%Y",
           "%m/%d/%Y",
           "%Y-%m-%d",
           "%d-%b-%Y",
           "%B %d, %Y",
           "%b %d, %Y"]

d = Date.new(2013, 1, 10)

regex = Regexp.union(formats.map{|f| Regexp.new(Regexp.quote(d.strftime(f)))})
# Search document for regex

如果您知道日期并将其输入为2013年10月6日,是否可能从该数据生成包含所有所需选项的正则表达式?我认为这是可能的。只是想知道是否有人在我之前来过这里。我希望我能想出一些模式来使用,但也许已经有了一个更完整、考虑更周全的选择?下层选民能解释他们的不满吗?我不是下层选民,但我想说你已经很好地表达了这个问题,但没有给出任何迹象表明你做了什么来帮助自己。在本例中,我不希望看到您的代码,因为您正在查找示例或库。但是你可以解释到目前为止你在哪里以及如何寻找例子。我的搜索包括谷歌等等。然后我贴了。有一些问题让人感觉像“一定有人以前做过”我想这可能是其中之一,但我没有找到具体的例子。坦率地说,我不知道如何在这里压缩搜索词。可能是“一对多日期格式匹配”。我想如果下一个投票人也发布了一个链接,显示我的问题是重复的,那么下一个投票会更容易接受。@akonsu是的,它效率很低,但很简单。根据要搜索的文档的大小,这可能已经足够了。根据这一点和其他因素(是否有必要搜索多个日期或仅搜索一个日期?)可能值得定义一个“类似日期”的概念,扫描文档一次以查找“类似日期”的内容,并仅对其进行测试。@akonsu我刚刚添加了另一个仅扫描文档一次的选项。谢谢。这对我有帮助。你也让我来到这里:这帮助我更好地理解你的代码。再次感谢。@PerryHorwich很乐意帮忙。包括Ruby支持的所有格式指令。