javascript - 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
解决方案
我设法使用正式的正则表达式匹配器使您的逻辑正常工作。您的正则表达式模式的问题是您正在使用否定前瞻来停止匹配。相反,使用肯定的前瞻来断言我们已经到达(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);
}
演示
推荐阅读
- python - Databricks 文件系统 - 根据日期复制文件
- react-native - 当列表中有短暂的触摸时,onPress 立即在 ListItem 中触发
- c# - 我如何转换 IEnumerable
长 - html - 在 index file.html 中包含一些 html 代码
- python - 如何从熊猫数据框中的另一列创建列,如下所示
- c++ - 如何从 C++ 或 cocos2dx 中的表情符号中获取 unicode?
- python-3.x - python包中的requirements.txt
- macos - NSTextField 是否有 textField:shouldReplaceCharactersInRange 的等价物?
- user-interface - 如何在 React Native 的底部默认构建模式?
- angular - 如何在特定输入标签下方的子组件angular4中传递和显示来自服务的验证错误