Совмещение взглядов вперед не совпадает - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть следующая тестовая строка, с которой я работаю:

__level__:,Undergraduate,;__subject__:,Maths,Art,;

На самом деле это строковый объект { level: ["Undergraduate"], subject: ["Maths", "Art"] }, который я решил преобразовать в строку и использовать регулярное выражение может быть быстрее, чемцикл по каждому уровню | субъекту и каждому значению в этих свойствах.

Я могу сопоставить одно значение в списке свойств (например, уровень), например:

(?=(__subject__:[^;]*(,Maths,).*?;))

И я могусопоставьте два примерно так:

(?=(__subject__:[^;]*(,Maths,).*?;))(?=(__subject__:[^;]*(,Art,).*?;))

Однако я не могу гарантировать порядок, в котором будут уровни и списки тем.Ниже также возможно:

__subject__:,Maths,Art,;__level__:,Undergraduate,;

Обратите внимание, что я поставил предмет перед уровнем сейчас.Теперь регулярное выражение не совпадает.Я довольно новичок, чтобы смотреть в будущее, поэтому я не могу понять, что я сделал неправильно.Буду признателен за любую помощь по этому вопросу.

Я также хочу объединить сопоставляемые свойства, поэтому что-то вроде:

(?=(__level__:[^;]*(,Undergraduate,).*?;))(?=(__subject__:[^;]*(,Maths,).*?;))(?=(__subject__:[^;]*(,Art,).*?;))

.. у меня тоже не работает, но япытаясь сопоставить два значения из свойства субъекта и значение из свойства уровня.Опять же, я не могу гарантировать порядок свойств (например, уровень, предмет) и / или значений (например, математика, искусство или искусство, математика)

1 Ответ

0 голосов
/ 07 февраля 2019

Класс \[A-Z\] & Позитивный Lookahead (?=)

Целями являются буквы [A-Z]+?, а для исключения слов, окруженных подчеркиванием, используйте положительный Lookaheadчтобы убедиться, что за целью следует запятая (?=,)

/([A-Z]+?)(?=,)/gi;

Демо

let str = `__level__:,Undergraduate,;__subject__:,Maths,Art,;`;
let rgx = /([A-Z]+?)(?=,)/gi;
let mch = rgx.exec(str);
let res = [];
while (mch !== null) {
  res.push(mch[0]);
  mch = rgx.exec(str);
}
console.log(res.join(', '));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...