Получить строку, заключенную в фигурные скобки, с экранированием, используя RegEx - PullRequest
0 голосов
/ 04 апреля 2019

Я хочу извлечь текст, заключенный в фигурные скобки. Но сложность заключается в том, что любая закрывающая фигурная скобка } с предшествующей обратной косой чертой \ должна быть также включена в результат.

Например, для строки {abc123*-\\}} я хочу извлечь текст как abc123*-\\}.

Вот пример кода, которого я достиг до сих пор:

var content = '{abc123*-\\}}{sdf}';
var regex = /\{(?<text>([^\}]|(?<=\\)\})*?)\}/;
var firstMatch = content.match(regex); // results 'abc123*-\\'

Ответы [ 2 ]

2 голосов
/ 04 апреля 2019

Вы можете использовать

var content = '{abc123*-\\}}{sdf}';
var regex = /\{([^\\{}]*(?:\\[^][^\\{}]*)*)}/;
var firstMatch = content.match(regex); // results 'abc123*-\\'
if (firstMatch) {
  console.log(firstMatch[1]);  // => abc123*-\}
}

Подробности

  • \{ - { char
  • ([^\\{}]*(?:\\[^][^\\{}]*)*) -Группа захвата 1:
    • [^\\{}]* - 0+ символов, отличных от \, { и }
    • (?:\\[^][^\\{}]*)* - 0 или более повторений
      • \\[^] - любой экранированный символ (a \, за которым следует любой символ)
      • [^\\{}]* - 0+ символов, отличных от \, { и }
  • } - } char.

См. regex demo и a Регулексный график :

enter image description here

0 голосов
/ 04 апреля 2019

Нашел решение, которое работает для глубоких вложенных фигурных скобок,

Пример 1,

var content = '{abc123*-\\}}{sdf}';
var regex = /(?<=\{)(.*?)((?=(?=\}\}))(?=\}).(?!\}{2})|(?!(?=\}\}))(?=\}))/g;
var firstMatch = content.match(regex); 
console.log(firstMatch);

Пример 2,

var content = '{{{abc123*-\\}}}}{sdf}}}}}}';
var regex = /(?<=\{)(.*?)((?=(?=\}\}))(?=\}).(?!\}{2})|(?!(?=\}\}))(?=\}))/g;
var firstMatch = content.match(regex); 
console.log(firstMatch);

Это даст вам все группы строк между внешними скобками {} в строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...