无法为此模式编写正则表达式

时间:2015-01-26 00:11:26

标签: javascript regex

我有以下模式:

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)

我想这就是你想要的:

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

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

答案 1 :(得分:3)

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

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

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"]