Javascript正则表达式匹配格式以解析数据

时间:2018-05-13 05:31:17

标签: javascript regex

我需要匹配字符串中的数据才能解析数据。数据的格式如下

A *(任何)B *(任何)ABC *(任何)

键将始终为A,B,ABC或DCE。

我让它适用于长度为一个字符的键。

$(function() {

var s = "A*(anything)B*(anything)ABC*(anything)DCE*(anything)";

s.match(/(A|B|ABC|DCE)\*[^*]+(?!\*)/g).forEach(match => {
    var [k, v] = match.split('*');

    console.log(k + "->" + v);
});

});

然而,这是输出(不能使用1+长度键

A->(anything)
B->(anything)AB
DCE->(anything)

值并不总是(任何东西) - 它是动态的。

我认为问题在于(?!*)/ g

2 个答案:

答案 0 :(得分:1)

我设法使用正式的正则表达式匹配器来运行逻辑。你的正则表达式模式的问题是你使用负前瞻来阻止匹配。相反,使用肯定前瞻,断言我们已经到达下一个(A|B|ABC|DCE)*或字符串的结尾。

var s = "A*(anything)B*(anything)ABC*(anything)DCE*(anything)";
var regexp = /(A|B|ABC|DCE)\*(.*?)(?=(?:A|B|ABC|DCE)\*|$)/g;
var match = regexp.exec(s);
while (match != null) {
    print(match[0].split("\*")[0] + "->"+ match[0].split("\*")[1]);
    match = myRegexp.exec(myString);
}

Demo

答案 1 :(得分:0)

为什么不使用[^\)]代替[^*]

var s = "A*(anything)B*(anything)ABC*(anything)DCE*(anything)";

// s.match(/[ABCDE]+\*[^\)]+\)/g).forEach(match =>
// or
s.match(/(A|B|ABC|DCE)\*[^\)]+\)/g).forEach(match => {
    var [k, v] = match.split('*');

    console.log(k + "->" + v);
});