Javascript, Regex - мне нужно захватить каждый раздел строки, содержащейся в скобках - PullRequest
2 голосов
/ 27 июня 2010

Вот что мне нужно в том, что, я думаю, должно быть в правильном порядке:

  1. Содержимое каждого раздела строки, заключенное в квадратные скобки (каждый из которых должен следовать после остальной части исходной строки) должны быть извлечены и сохранены, а исходная строка возвращена без них.
  2. Если в начале данного извлеченного раздела есть распознанная строка, за которой следует двоеточие, то мне нужно, чтобы она была идентифицирована и удалена.
  3. Для того, что осталось (через запятую), мне нужно, чтобы оно было выгружено в массив.
  4. Не пытайтесь анализировать вложенные скобки.

Какой хороший способчтобы сделать это?

Редактировать: Вот пример строки:

привет, я строка [это: есть, как] [это: работает, но есть] [может быть скобками, частями, без двоеточий] [[вложенные разделы должны игнорироваться?]]

Редактировать: Вот что может бытьрезультаты:

После извлечения: 'привет, я строка'

Array iобозначается как 'this': ['is', 'how']

Массив, идентифицированный как 'it': ['works', 'но', 'there']

Массив, идентифицированный безметка: ['может быть в скобках', 'части', 'без', 'двоеточия']

Массив идентифицирован без метки: []

1 Ответ

3 голосов
/ 27 июня 2010
var results = [];
s = s.replace(/\[+(?:(\w+):)?(.*?)\]+/g,
      function(g0, g1, g2){
        results.push([g1, g2.split(',')]);
        return "";
      });

Дает результаты:

>> results =
  [["this", [" is", " how"]],
   ["it", [" works", " but", " there"]],
   ["", ["might be bracket", " parts", " without", " colons "]],
   ["", ["nested sections should be ignored?"]]
  ]

>> s = "hi, i'm a string     "

Обратите внимание, что между токенами остаются пробелы. Также вы можете удалить [[]] токенов на более ранней стадии, вызвав s = s.replace(/\[\[.*?\]\]/g, ''); - этот код захватывает их как обычную группу.

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