首页 > 解决方案 > Javascript 正则表达式匹配格式以解析数据

问题描述

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

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

标签: javascriptregex

解决方案


我设法使用正式的正则表达式匹配器使您的逻辑正常工作。您的正则表达式模式的问题是您正在使用否定前瞻来停止匹配。相反,使用肯定的前瞻来断言我们已经到达(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);
}

演示


推荐阅读