时间戳字符串的正则表达式

时间:2013-11-18 23:03:32

标签: javascript jquery regex

我希望使用jQuery来定位以下字符串。具体来说,我需要将其包装在一个强大的标签中以便进行样式设置。我无法更改源数据。我的正则表达是可悲的。有什么建议?

Nov 18, 2013, 4pm CST:

谢谢你们 - 这些都是很好的答案。我应该稍微具体一点 - 我需要在集合中匹配所有这种格式,例如:

$('.admin-comments').match(/[A-Z]{1}[a-z]{2}\s[0-9]{1,2},\s[0-9]{4},\s[0-9]{1,2}[a|p]m\s[A-Z]{3}/)

(我有一个评论日志,我正在尝试将时间戳包装在一个强大的元素中。)

编辑:最终工作解决方案

  var adminComment = $('.admin-comments');

  if (adminComment.length) {
    var adminCommentTxt  = adminComment.text();
    var formatCommentTimestamp = adminCommentTxt.replace(/([A-Z]{1}[a-z]{2}\s[0-9]{1,2},\s[0-9]{4},\s[0-9\s]{1,2}[ap]m\s[A-Z]{3}\:)/g, "<strong>$1</strong>"); 

    adminComment.html(formatCommentTimestamp);    
  }

2 个答案:

答案 0 :(得分:3)

在这里:/^[A-Z]{1}[a-z]{2}\s[0-9]{1,2},\s[0-9]{4},\s[0-9]{1,2}[a|p]m\s[A-Z]{3}\:$/

'Nov 18, 2013, 4pm CST'.match(/^[A-Z]{1}[a-z]{2}\s[0-9]{1,2},\s[0-9]{4},\s[0-9]{1,2}[a|p]m\s[A-Z]{3}\:$/)
["Nov 18, 2013, 4pm CST"]

请注意,此正则表达式期望该行以此日期开始和结束,如果日期包含在其他文本中,则从开头删除^,从结尾删除$

希望这有帮助。

进一步解释正则表达式,希望++你的“正则表达式”

  • [A-Z] {1} - 匹配一个大写字母
  • [a-z] {2} - 匹配两个小写字母

到目前为止,我们在11月,10月,1月等。

  • \ s - space
  • [0-9] {1,2} - 1(最小)或2(最大)位数
  • , - 文字逗号
  • \ s - space
  • [0-9] {4} - 一个4位数字(年份)

所以现在我们匹配:2013年11月18日

  • , - 文字逗号
  • \ s - space
  • [0-9] {1,2} - 就像之前一样,一个或两位数字
  • [a | p] m - 'a'或'p'后跟'm'

现在我们匹配:2013年11月18日,下午4点

  • [A-Z] {3}大写三个字符串
  • \:literal colon

这是整个字符串。

^放在正则表达式的开头意味着我们匹配的文本必须以模式开头;类似地,$表明我们匹配的文本必须以模式结束。

祝你好运!

答案 1 :(得分:0)

Rob M的回答非常有效,而且比我的版本更通用,可能正是您所期待的。但是,如果您想更具体地了解您的月份和时区,这可能对您有用:

(Oct)?(Nov)?\s\d{1,2},\s\d{4},\s\d{1,2}(pm)?(am)?\s(CST)?(PST)?:

这将匹配所有:

Nov 18, 2013, 4pm CST:
Oct 8, 2011, 11am PST:
Nov 02, 1981, 2am PST:
Oct 31, 1843, 12pm CST:

如果您需要更多月份,只需添加每个月:

(Mmm)? where Mmm corresponds to the month you want to match.

同样,如果你需要更多的时区,你可以这样添加它们:

(ZZZ)? where ZZZ corresponds to the timezone you want to match.

与Rob的回答类似,如果您的日期字符串是该行唯一的东西,您可以添加/ ^和&amp; /前缀&amp;后缀。