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