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

标签 javascript regex

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

A*(任意)B*(任意)ABC*(任意)

key 始终为 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

最佳答案

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

关于Javascript 正则表达式匹配格式来解析数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50313055/

相关文章:

javascript - 仅当用户启用了 JavaScript 时才使用一些 CSS

javascript - jQuery.Lazy() : Plugin is not loading my 'li' contents

jquery - 如何同时替换字符和数字?

java - 正则表达式中某些字符的长度

javascript - 如何实现简单的原生拖放?

javascript - 尝试使用 Spotify Web Api 将歌曲添加到另一个协作播放列表时出现 403 禁止错误

javascript - 有没有办法实现 "click"、 "double click"和 "click and hold"来处理同一元素?

java - java中的正则表达式匹配每个 "line begin"并替换

java - 如何编写 XSD 来验证转义的 xml 数据模式

javascript - 如何使用正则表达式匹配带空格和不带空格的字符串?