我正在做一个正则表达式来分隔作为键:值文本输入与此类似
QA〜BlaBlaBlaWE〜1235123FA〜blablablaER〜blabla123ZX〜2342blaaa
我已经能够将其分开,但是当尝试将Group3作为键并将Group4作为值时
质量检查〜BlaBlaBla
它保留在Group2(QA)中,而Group3保留在值(BlaBlaBla)
我的正则表达式是这个
(((\ w {2}〜)?(。*?)(\ w {2}〜| $))
关键是能够创建这样的列表
> Key Value
> QA BlaBlaBla
> WE 1235123
> FA blablabla
> ER blabla123
> ZX 2342blaaa
这是示例 https://regex101.com/r/Xh8RAA/1
我不能很好地创建正则表达式,以便所有内容都在Group3和Group4中,有人可以帮助我
答案 0 :(得分:1)
您要查找的是 lookahead ,它将检查当前位置是否跟随某些模式,而不消耗模式中的字符。您还可以删除包含整个正则表达式的不必要捕获组,这样就可以使组1包含键,使组2包含值,而无需其他任何组。另外,由于密钥是必需的,因此密钥组不应是可选的:
(\w{2})~(.*?)(?=\w{2}~|$)
答案 1 :(得分:0)
您可以使用正向超前模式来避免消耗下一个标头令牌:
([A-Z]{2})~(.*?)(?=[A-Z]{2}~|$)
用第1组和第2组的匹配项替换后跟换行符,您将获得所需的输出。
答案 2 :(得分:0)
您可以尝试以下Regular Expression
:
/.{2}~[^~]+((?=..~)|$)/g
在下面检查其结果:
console.log("QA~BlaBlaBlaWE~1235123FA~blablablaER~blabla123ZX~2342blaaa".match(/.{2}~[^~]+((?=..~)|$)/g));
使用以下代码,可以将其作为对象(key/val
):
function CustomSplit(s){
var r={};
s.match(/(.{2})~([^~]+((?=..~)|$))/g).forEach(function(a){a=a.split("~"); r[a[0]]=a[1];});
return r;
}
console.log(CustomSplit("QA~BlaBlaBlaWE~1235123FA~blablablaER~blabla123ZX~2342blaaa"));