我希望使用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);
}
答案 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"]
请注意,此正则表达式期望该行以此日期开始和结束,如果日期包含在其他文本中,则从开头删除^
,从结尾删除$
。
希望这有帮助。
进一步解释正则表达式,希望++你的“正则表达式”
到目前为止,我们在11月,10月,1月等。
所以现在我们匹配:2013年11月18日
现在我们匹配:2013年11月18日,下午4点
这是整个字符串。
将^
放在正则表达式的开头意味着我们匹配的文本必须以模式开头;类似地,$
表明我们匹配的文本必须以模式结束。
答案 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;后缀。