Я делаю регулярное выражение для разделения в качестве ключа: значение текстовой записи похоже на это
QA ~ BlaBlaBlaWE ~ 1235123FA ~ blablablaER ~ blabla123ZX ~ 2342blaaa
Мне удалось отделить его, но при попытке взять Group3 в качестве ключа и Group4 в качестве значения
QA ~ BlaBlaBla
он остается в Group2 (QA) и Group3 значением (BlaBlaBla)
мое регулярное выражение - это
((\ Ш {2} ~) (*) (\ W {2} ~ |?.? $))
дело в том, чтобы создать список, подобный этому
> Key Value
> QA BlaBlaBla
> WE 1235123
> FA blablabla
> ER blabla123
> ZX 2342blaaa
и вот пример https://regex101.com/r/Xh8RAA/1
Я не могу создать регулярное выражение так, чтобы все было в Group3 и Group4, кто-то мог мне помочь
Вы можете использовать позитивный шаблон, чтобы избежать использования следующего токена заголовка:
([A-Z]{2})~(.*?)(?=[A-Z]{2}~|$)
Замените матч с группой 1 и группой 2, а затем с новой строкой, и вы получите желаемый результат.
То, что вы ищете, - это lookahead, который будет проверять, что за текущей позицией следует некоторый шаблон без использования символов в шаблоне. Вы также можете удалить ненужную группу захвата, охватывающую все регулярное выражение, чтобы вы могли получить группу 1, содержащую ключ, и группу 2, чтобы содержать значение, без каких-либо других групп. Кроме того, поскольку ключи необходимы, группа ключей не должна быть дополнительной:
(\w{2})~(.*?)(?=\w{2}~|$)
Вы можете попробовать это 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"));