javascript - 如何组合正则表达式

标签 javascript regex

我有以下函数可以验证两种主要格式的日期格式:带分隔符和不带分隔符。

function check_date_format (my_date) {

    var regex = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{2})$/; //Declare regex for date with separators
    var date_array = my_date.match(regex);

    if (date_array == null) {
        regex = /^(\d{2})(\d{2})(\d{2})$/; //Declare regex for date without separators
        date_array = my_date.match(regex);

        if (date_array == null) {
            return false;
        } else {
            return true;
        }
    }
    return true;
}

第一个 .match(regex) 返回一个包含 5 个元素的数组:日(1 或 2 位数字)、第一个分隔符(- 或/)、月(1 或 2 位数字)、第二个分隔符(- 或/可以不同于第一个分隔符)和年份(2 位数字)。

第二个 .match(regex) 返回包含 3 个元素的数组:日(2 位数字)、月(2 位数字)和年(2 位数字)。

我试图用这个正则表达式将两者合并:

/^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{2})$|^(\d{2})(\d{2})(\d{2})$/

验证有效,但 my_date 变成了一个包含 8 个单元格的数组,其中前 5 个或后 3 个单元格将未定义,具体取决于正则表达式的哪一部分与模式匹配。

有没有办法合并这两个部分,并根据匹配的部分只返回一个包含 5 个或 3 个单元格的数组?

这是一个fiddle用于测试多种日期格式以及合并和拆分的正则表达式。

最佳答案

这个正则表达式应该做你想做的:

/^(\d{1,2})([\/-]?)(\d{1,2})\2(\d{2})$/

日、月、年分别在捕获组1、3、4中。

我使用反向引用 \2 来确保第二个分隔符(年和月之间)与捕获组 2 中捕获的第一个分隔符相同 ([\/-]?)。因此,它与您的代码略有不同:它不接受带有混合分隔符的输入,例如 12/3-01

关于javascript - 如何组合正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21856191/

相关文章:

regex - 提取以 &[? 开头的最后一个元素的正则表达式

PHP 和正则表达式 - 可选部分

javascript - 函数未定义 C#

javascript - 从对象数组中删除元素后,Angular 2 View 未更新

javascript - 检测 CSS 中的内容溢出

javascript - Bootstrap Mobile Menu Dropdown 显示为 Desktop 版本

javascript - 使用数字短格式日期模式检测特定字符串结构

java - 需要使用replaceAll方法进行替换

javascript - 自动将每个函数导出为 main 方法

c# - 从文本文件中删除一些特殊的词