在正则表达式中捕获重复的组



>我有以下字符串:

{:.test1, .test2, .test3}

我将其用作Markdown的扩展。对于该字符串,我想要一个带有 ace 的语法高亮。但是,我无法构建捕获正确组的匹配正则表达式。

我需要捕获的是:{:作为第一组。所有.test#都在第二组中。所有,作为第三组,最后}

我想出的当前正则表达式是:({:)(\.\w+)(,\s*|)

但是,这仅匹配:{:.test1,,而不是以下.test2,

我需要的是一个正则表达式,它可以捕获{:,然后发生.test1,,最后}

目的是为与类名不同的逗号着色,因此我需要捕获它。

请参阅 https://github.com/ajaxorg/ace/wiki/Creating-or-Extending-an-Edit-Mode

还有一个例子:

{
  token : ["constant", "keyword"],
  regex : "^(#{1,6})(.+)$"
} // ### Header -> constant(###), keyword( Header)

在这里,他们匹配两组,我需要 4 组。

{
  token : ["constant", "keyword", "variable", "constant"],
  regex : "unknown"
} 
// {:.test1, .test2} -> constant({:), keyword( .test1), keyword(.test2), variable(,), constant(})
这在一个

正则表达式中是不可能的。要么使用

    {
        onMatch : function(v) {
            var tokens = v.slice(2, -1).split(/(,s+)/).map(function(v) {
                return {
                    value: v,
                    type: v[0]=="."? "keyword" : "variable"
                }
            })
            tokens.unshift({value: "{:", type: "constant"})
            tokens.push({value: "}", type: "constant"})
            return tokens;
        },
        regex : "{:((\.\w+)(,\s*|))+}"
    }

this.$rules = {
    "start" : [ {
        token : "constant",
        regex : "{:",
        next : [{
            regex: "\.w+",
            token: "keyword"
        },{
            regex: ",",
            token: "variable"
        },{
            regex: "$|}",
            token : "constant",
            next: "pop"
        }]
    }]
};
this.normalizeRules()

您可以使用此正则表达式:

s = '{:.test1, .test2, .test3}';
m = s.match(/({:)((?:.w+[^.}]*)+)(})/);
//=> ["{:.test1, .test2, .test3}", "{:", ".test1, .test2, .test3", "}"]

编辑:

var re = /(.w+)(, *)?/g,
    words = [], commas = [],
    input = m[2];
while (match = re.exec(input)) { words.push(match[1]); commas.push(match[2]); }
console.log(m[1], words, commas, m[3]);

相关内容

  • 没有找到相关文章

最新更新