我需要匹配字符串中的数据才能解析数据。数据格式如下
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/