我做了一个regex来分隔为key:value文本条目类似于
QA~BlaBlaBlaWE~1235123FA~blablablaER~blabla123ZX~2342blaaa
我已经能够将它分开,但是当尝试将Group3作为键,Group4作为值时
QA~废话
它保留在组2(QA)和组3中的值(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中有人可以帮助我
您可以使用正向先行模式来避免使用下一个标头标记:
用第1组和第2组替换匹配项,后面跟着一个换行符,您将得到所需的输出。在
演示:https://regex101.com/r/Xh8RAA/2
您要查找的是lookahead,它将检查当前位置是否后跟某个模式,而不消耗模式中的字符。还可以删除包含整个正则表达式的不必要的捕获组,这样就可以让组1包含键,组2包含值,而不需要任何其他组。另外,由于密钥是必需的,所以密钥组不应该是可选的:
https://regex101.com/r/Xh8RAA/6
你可以试试这个
Regular Expression
:检查结果如下:
使用下面的代码,您可以将其作为对象(
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"));
;