2013-07-27 3 views
0

Я работаю в среде Adobe ExtendScript (Javascript), пытаясь совместить секцию с строкой, но ничего, что я пытаюсь, кажется, работает. Вот пример строки:Javascript (ExtendScript) Reg Exp совпадение

Q1: Question 1: this is the first question? 

- Answer bit 
- Answer bit 
- Answer bit 

Q2: Question 2: this is the second question? 

- Answer bit 
- Answer bit 
- Answer bit 

Q3: Question 3: this is the third question? 

- Answer bit 
- Answer bit 
- Answer bit 

Я хочу, чтобы иметь возможность соответствовать весь вопрос и ответ немного, так что от «Qx» до следующего экземпляра Q (или Qx + 1). Каждый RegExp Я пытаюсь либо просто получить вопросную строку, либо возвращает null.

Любая помощь с решением MUCH оценили, я до сих пор не расколол Reg Exp.

+0

В любом случае, пожалуйста, отправьте свои неудачные попытки, чтобы мы могли построить их и сказать вам, где вы поступили не так. Тем временем: http://www.regular-expressions.info/tutorial.html –

+0

Это то, что я пытаюсь: Q. *? [\ S \ S] (? = Q) Я могу динамически вставлять номера вопросов в Reg Exp, так что это будет Q1. *? [\ s \ S] (? = Q2), например. Но это не сработает. – kinkersnick

+0

Вы разрешаете только один символ с '[\ s \ S]'. Повторить его, как '[\ s \ S] *?', Должно помочь. –

ответ

0

Вы можете получить его с этим рисунком:

/Q\d+: (.+)\n\n([\s\S]+?)(?=\n\nQ\d+:|\n*$)/g 

Если вопрос находится в первой группе захвата и ответов в секунду. Фокус в том, что точка не соответствует символам новой строки, поэтому я заменяю ее на [\ s \ S], когда мне нужны новые строки.

+0

Возвращает null к сожалению. Пробовали вещь [\ s \ S] и, кажется, ничего не делают, не могут найти никакого способа перетекания через разрывы строк! – kinkersnick

0

Вы знаете насчет lookaheads. Вы можете использовать lookahead в каждой позиции, чтобы проверить, что текущий символ не запускает новый вопрос. Если это не так, используйте символ и повторите. Также обратите внимание, что . не соответствует разрыву строк. [^] с другой стороны, соответствует любому символу:

/^Q\d+:(?:(?!Q\d+:)[^])+/gm 

Или, если вы хотите, чтобы захватить этот вопрос отдельно,

/^Q\d+:\s*(.*)((?:(?!Q\d+:)[^])+)/gm 

Сейчас вопрос находится в группе 1 и ответ в группе 2 (который вам может trim впоследствии).