Javascript, Regex - мне нужно получить записи с параметрами, возможно, в нескольких строках - PullRequest
1 голос
/ 28 июня 2010

Исходя из моего предыдущего вопроса , я нашел лучший способ решения своей проблемы.Вот что я имею в виду:

  1. Я хочу начать извлечение символов слова / пробела до первого появления разделителя канала ('|') или новой строки.Урежьте пробел с обоих концов.Это извлечение будет началом новой «записи».
  2. Для каждой найденной трубы (если есть) я хочу удалить трубу, а затем извлечь все до следующего появления трубы или новой строки.Обрезать пробелы.Все извлеченное будет параметром для вышеупомянутой «записи».
  3. Для следующего вхождения новой строки:
    1. Если новая строка начинается с канала, или предыдущая строка заканчивается одним, я хочуудалить символ новой строки, как будто его там не было.
    2. В противном случае я хочу начать заново с шага 1 с новой «записи».

Вотпример ввода:

This will be a new entry | param1 |param2  |etc.
This is another entry, but without params
This is a third entry|with a twist
  | I'm using subsequent lines for
  | its parameters.
Yet I still want the next line to be another new entry.

И это должен быть вывод:

Entry #1: "This will be a new entry"
  Params: ["param1","param2","etc."]
Entry #2: "This is another entry, but without params"
Entry #3: "This is a third entry"
  Params: ["with a twist","I'm using subsequent lines for","its parameters."]
Entry #4: "Yet I still want the next line to be another new entry."

Что было бы хорошим способом сделать это?

1 Ответ

1 голос
/ 28 июня 2010

На этом этапе вам следует подумать о написании правильной грамматики и использовании генератора синтаксических анализаторов вместо взлома регулярных выражений для выполнения этой работы.

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

Вместо этого рассмотрим что-то вроде следующего псевдокода:

foreach (line of input)
    If the first non-whitespace character is NOT a delimiter
        output what we have so far, then parse out the title of the next entry
    while there's still text on this line
        grab up to the next delimiter, parse as a parameter.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...