jQuery 简单匹配不返回任何内容 [已关闭]

jQuery simple match does not return anything [closed]

提问人:Christoph Linden 提问时间:11/13/2023 更新时间:11/13/2023 访问量:33

问:


这个问题是由错别字或无法再现的问题引起的。虽然类似的问题可能在这里是主题,但这个问题的解决方式不太可能帮助未来的读者。

9天前关闭。

我正在尝试将网页上的所有日期元素转换为另一种日期格式。

以下是日期字符串的格式: YYYY-MM-DD

我试图说服jQuery使用以下匹配来识别3个日期字段: /(\d{4})-(\d{1,2})-(\d{1,2})/

但是,我的jQuery代码不返回任何内容(null对象):

jQuery(document).ready(function($) {
    $('#geburtsdatum').each(function() {
        console.log($(this).attr('id'));
        var gebdatum = $(this).text();
     console.log(gebdatum);
        var text = "The rain in SPAIN stays mainly in the plain";
        var result = text.match(/ain/gi);
     console.log(result);
        text = "1981-12-08";
        result = text.match(/\d{1,4}/gi);
     console.log(result);
        var m = gebdatum.match(/(\d{4})-(\d{1,2})-(\d{1,2})/);
     console.log(m);
        gebdatum = [ m[3], m[2], m[1] ].join('.');
        $(this).text(text);
    });
});

下面是相应的控制台输出:

JQMIGRATE: Migrate is installed, version 3.4.1
geburtsdatum
1983-11-18
(4) ['ain', 'AIN', 'ain', 'ain']
null
null

所以我在里面做了一些测试来验证 .match() 函数。

第一个测试正在工作...... 此外,字符串已正确设置,因此 gebdatum 具有预期的输入。

即使是这个简单的匹配也应该返回完全相同的结果: /\d{1,4}/gi

它是空的。如 \d 不被解释为数字。我需要另外逃跑\,还是这里发生了什么?

这是我喜欢的实际代码:

jQuery(document).ready(function($) {
    $('#geburtsdatum').each(function() {
        console.log($(this).attr('id'));
        var gebdatum = $(this).text();
        var m = gebdatum.match(/(\d{4})-(\d{1,2})-(\d{1,2})/);
        gebdatum = [ m[3], m[2], m[1] ].join('.');
        $(this).text(text);
    });
});
jQuery 正则表达式

评论

1赞 phuzi 11/13/2023
是否可以更新您的问题以包括 HTML 标记的相关示例以及实际输出与预期输出?
0赞 freedomn-m 11/13/2023
$('#geburtsdatum').eachID 必须是唯一的,因此这只会循环一次(最多) - 使用类
0赞 freedomn-m 11/13/2023
请参阅最小可重现示例 - 提供一个没有足够代码(根据需要提供 js/html/css)的代码片段演示问题可能会确定您的期望与实际结果不匹配的地方。您的代码,如所提供的那样,使用简单的 HTML 输入,工作正常(只需稍作更改即可输出结果 jsfiddle.net/ur904hbc 此 jsfiddle 中没有值 - 因此一定是您的代码不符合预期。提供一个完整的最小可重现示例可能会很快显示问题。$(this).text(gebdatum)nullinput
0赞 Christoph Linden 11/13/2023
如下图所示,这是WordPress WPBakery和jQuery组合的问题。它需要在 \d 之前使用 \,因为 \d 将转义 d 而不是将其放入脚本中。

答:

0赞 AztecCodes 11/13/2023 #1

所做的更改:

  • 从 ID 更改为类选择器 ($('.geburtsdatum')),以定位多个元素。
  • 添加了错误处理,以检查日期格式是否匹配并避免 JavaScript 错误。
  • 更正了文本替换逻辑,以使用重新格式化的日期 (gebdatum) 而不是未定义的变量。

修订守则:

jQuery(document).ready(function($) {
    $('.geburtsdatum').each(function() {
        var gebdatum = $(this).text();
        var m = gebdatum.match(/(\d{4})-(\d{1,2})-(\d{1,2})/);
        if (m) {
            gebdatum = [m[3], m[2], m[1]].join('.');
            $(this).text(gebdatum);
        } else {
            console.log('Date format not matched for:', gebdatum);
        }
    });
});

评论

0赞 Christoph Linden 11/13/2023
我不确定为什么我的线程被关闭了,因为那也不是解决方案。该字符串每次都是 100% 正确的,因为它是 SQL 日期字段输出。所以它不能是任何不同的值。问题还在于匹配,仅此而已。是的,我确实理解(并且自己发现)匹配 id 不会提供例外结果,即使我不明白为什么如果这不能为您提供所有匹配的 ID,为什么会有 foreach。
0赞 Christoph Linden 11/13/2023
无论如何,问题(我很想把它反馈给一个 anwser)是,无论出于何种原因,wordpress 和 WPBakery 插件实际上确实需要一个转义的 \,因为它在其他方面试图转义 d。所以答案看起来像 ''' gebdatum.match(/(\\d{4})-(\\d{1,2})-(\\d{1,2}); '''