Текст соответствия регулярному выражению между группами

1

Я делаю регулярное выражение для разделения в качестве ключа: значение текстовой записи похоже на это

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, кто-то мог мне помочь

Теги:

3 ответа

0
Лучший ответ

Вы можете использовать позитивный шаблон, чтобы избежать использования следующего токена заголовка:

([A-Z]{2})~(.*?)(?=[A-Z]{2}~|$)

Замените матч с группой 1 и группой 2, а затем с новой строкой, и вы получите желаемый результат.

Демо: https://regex101.com/r/Xh8RAA/2

1

То, что вы ищете, - это lookahead, который будет проверять, что за текущей позицией следует некоторый шаблон без использования символов в шаблоне. Вы также можете удалить ненужную группу захвата, охватывающую все регулярное выражение, чтобы вы могли получить группу 1, содержащую ключ, и группу 2, чтобы содержать значение, без каких-либо других групп. Кроме того, поскольку ключи необходимы, группа ключей не должна быть дополнительной:

(\w{2})~(.*?)(?=\w{2}~|$)

https://regex101.com/r/Xh8RAA/6

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"));

Ещё вопросы

Сообщество Overcoder
Наверх
Меню