判断规则:必须以##开头,以##结束,中间包含1-50个中文或英文字符,不允许为空或超长
##...##里面[key:value]是可选的,就是[开头,]结束,并且必须包含:,:前后都要有值大概样子是##我是一个标题[id:1][name:李四]##跪求大神给一完美的正则表达式,谢谢啦

解决方案 »

  1.   


    var reg=/^(?=##.{1,50}##$)##[\u4e00-\u9fa5a-z\d]*([\u4e00-\u9fa5a-z\d]*\[[a-z\d]+\:[a-z\u4e00-\u9fa5\d]+\])*[a-z\u4e00-\u9fa5\d]*##/i;    var arr=[
            '##我是一个标题[id:1][name:李四]##',
            '##我是一个标题##',
            '##我是一个标题[id:1][name:李四]aa[name:李四]##',
            '##我是一个标题[id:1][name:李四]aa[name:李四]name:李四]aa[name:李四]##',
            '##我是一个标题[id:1][name:李四]aa[name:李四][name:李四]aa[name]##',
            '我是一个标题[id:1][name:李四]我是一个标题[id:1][name:李四]我是一个标题[id:1][name:李四]我是一个标题[id:1][name:李四]我是一个标题[id:1][name:李四]我是一个标题[id:1][name:李四]'
        ]
        arr.forEach(function (item) {
            console.log(reg.test(item));
        })试下这样对不
      

  2.   

    @似梦飞花 谢谢楼上,我表达的还是不严谨,是我错了,##我是一个标题[id:1][name:李四]aa[name:李四]##,这种一旦[]开始了,接下来就一定都是[]了,中间就不能再出现aa了
    另外能解释下啥意思吗,严重的看不懂啊
      

  3.   


    /^(?=##.{1,50}##$)##[\u4e00-\u9fa5\w]+(?:\[[^\[\]]+:[^\[\]]+\])*##$/
      

  4.   


    var reg=/^(?=##.{1,50}##$)##[\u4e00-\u9fa5a-z\d]*(\[[a-z\d]+\:[a-z\u4e00-\u9fa5\d]+\])*##/i;    var arr=[
            '##我是一个标题[id:1][name:李四]##',
            '##我是一个标题##',
            '##我是一个标题[id:1][name:李四]aa##'
        ]
        arr.forEach(function (item) {
            console.log(reg.test(item));
        })
    这样?
      

  5.   

    推荐个网站,自己去学下正则表达式吧。
    https://regexper.com