求一个匹配cron表达式的正则 数字前的星号替换成0

表达式1:* 3/6 * * * ? * 替换后的文本 0 3/6 * * * ? *
表达式2:* * 3/5 * * ? * 替换后的文本 0 0 3/5 * * ? *
表达式3:2-0 * * 2/1 * ? * 这种应该是不用替换吧?

表达式1和表达式2的星号如果不替换的话 出来的数据会有问题

这个网站http://cron.ciding.cc/测试的表达式会自动替换
我实在是想不来正则要怎么写
求求大佬们救救孩子qwq

阅读 2.5k
2 个回答

仅仅考虑你给出的

/(?<=^(?:\*\s)*)(\*)(?=[\s*]*\d)/g

但是考虑有 -, , 符号,还是用代码手动替换好

自己写了一个也找了一个别人用jquery写的

demo() {
    const z = /((\*| )+)(?=[0-9])/g
    let str = '* * * * * 2a5 * * * 3/5 * * * ? *'
    let result = str.replace(z, (match) => {
        console.log(match)
        let s = ''
        if (!match) return s
        for(let i = 0; i < match.length; i++) {
            if (match[i] === '*') {
                s += '0'
            } else {
                s += ' '
            }
        }
        return s
    })
  }
 var a = $("input[name^='v_']");
  var i = $("#cron");
  a.change(function() {
    var e = [];
    a.each(function() {
      e.push(this.value)
    });
    var n = 0;
    $(".tabs>li").each(function(e, t) {
      if ($(t).hasClass("tabs-selected")) {
        n = e;
        return false
      }
    });
    for (var t = n; t >= 1; t--) {
      if (e[t] != "*" && e[t - 1] == "*") {
        e[t - 1] = "0"
      }
    }
    if (e[n] == "*") {
      for (var t = n + 1; t < e.length; t++) {
        if (t == 5) {
          e[t] = "?"
        } else {
          e[t] = "*"
        }
      }
    }
    i.val(e.join(" ")).change()
  });
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏