为此模式编写正则表达式时遇到问题

Having trouble writing regular expression for this pattern

本文关键字:遇到 问题 正则表达式 模式      更新时间:2023-09-26

我有以下模式:

4/24
8/14/23
3/5/9/21

"/"的左侧是 1-23 之间的数字范围"/"的右边也是一个介于 1-23 之间的数字范围。请注意,"/##"可以重复多次。

我尝试了这个正则表达式,但它不起作用:

var move = "2/11/23";
var r = new RegExp("^([1-9]|1[0-9]|2[0-3])(/([1-9]|1[0-9]|2[0-3])+)$", "g");
var result= move.match(r);

但它不起作用。

谁能帮我修改它才能工作。

谢谢!

我想这就是你想要的:

^(?!'/)((^|'/)(2[0-3]|1[0-9]|[1-9]))+$

演示:https://regex101.com/r/nG9oY0/1

由于从这个问题中不清楚解决方案是否必须使用正则表达式......

就个人而言,我不建议不使用此任务的正则表达式。我会发现这样的函数更容易使用:

function processDate(string) {
    var tokens = string.split('/');
    return {
        tokens: tokens,
        isValid: tokens.every(function(token) {
            var num = parseInt(token, 10);
            return 1 <= num && num <= 23; 
        })
    };
}
var x = "4/24"
var y = "8/14/24"
var z = "3/5/9/21"
console.log(processDate(x).isValid); // true
console.log(processDate(y).isValid); // false
console.log(processDate(z).isValid); // true
console.log(processDate(x).tokens); // ["4", "24"]
console.log(processDate(y).tokens); // ["8", "14", "24"]
console.log(processDate(z).tokens); // ["3", "5", "9", "21"]