使用javascript/jQuery包装日期序号

使用javascript/jQuery包装日期序号,javascript,jquery,date,Javascript,Jquery,Date,我有一些HTML结构如下: <span class="time">Monday, December 24th</span> <span class="time">Tuesday, December 25th</span> <span class="time">Monday, December 31st</span> 12月24日,星期一 12月25日,星期二 12月31日,星期一 我无法更改HTML输出。我想要的是将日期

我有一些HTML结构如下:

<span class="time">Monday, December 24th</span>
<span class="time">Tuesday, December 25th</span>
<span class="time">Monday, December 31st</span>
12月24日,星期一
12月25日,星期二
12月31日,星期一
我无法更改HTML输出。我想要的是将日期序号包装在一个标记中,这样我就可以使用CSS对其进行样式设置,这样看起来就像:

<span class="time">Monday, December 24<sup>th</sup></span>
<span class="time">Tuesday, December 25<sup>th</sup></span>
<span class="time">Monday, December 31<sup>st</sup></span>
12月24日,星期一
12月25日,星期二
12月31日,星期一
我不能仅仅在字符串中查找/替换,因为,例如,如果有人输入“4月11日,星期四”,单词“星期四”包含“th”。因此,我必须解析每个字符串,找到数字,然后查看是否有日期序号跟随它们,以便将其包装在
标记中

类似这样的东西可以找到数字,但是我如何包装接下来的两个字母,而不是数字

$('span.time').each(function() {
    $(this).html(function(i, v) {
      return v.replace(/(\d)/g, '<sup>$1</sup>');
    });
});
$('span.time')。每个(函数(){
$(this).html(函数(i,v){
返回v.替换(/(\d)/g,$1');
});
});


有什么想法吗?

假设服务器的格式一致,您可以对最后两个字符执行字符串
replace()

使用
html(函数)
简化了现有内容的循环和访问

$('.time').html(函数(\ux,现有){
返回现有的.trim().replace(/(..$)/,“$1”);
});

12月24日,星期一
12月25日,星期二
12月31日星期一
是:您只需要两个“捕获组”,它们在正则表达式中用括号括起来。然后指定如何处理找到的每个组

在这种情况下,只需重新打印
$1
(数字),然后将
$2
弹出到标记中

$('span.time')。每个(函数(){
$(this).html(函数(i,v){
返回v.替换(/([0-9]+)(th | st | rd | nd)/g,'1$2');
});
});
12月23日,星期一
12月24日星期二
12月31日星期一
12月2日星期一
12月1日,星期一
似乎是示例中的最后2个字符,或者是最后一个数字中的字符?可能是,但我希望有一个解决方案,通过查找数字而不是数字来搜索,以防有人输入“4月21日星期一”或者诸如此类的东西你的散文解释已经达到了90%的程度:使用一个正则表达式查找一个数字
[0-9]
,后跟
(th | st | rd)
,并用
$1
替换该标记。老实说,我认为通过momentjs解析它并计算出日期时间格式比试图在数字后找到2个字符要容易。你真的不需要jQuery:
document.querySelectorAll('span.time').forEach(node=>node.innerHTML=node.textContent.replace(…)
。而且它实际上与日期没有任何关系。:-)谢谢你的回答。这肯定会起作用,但是有没有一种方法可以通过识别数字来做到这一点,以防字符串发生变化,比如“4月21日星期一”?只修改后缀的正则表达式instead@RCNeil以防万一,我的意思是,我得到的类是说它是一个时间,但你可能想实际完全解析整个日期时间。如果是2008年12月24日星期一,会发生什么情况呢?在使用正则表达式时,你必须非常小心。