RegEx:在某个块之后匹配两个换行符

时间:2016-08-09 13:15:06

标签: javascript regex prism.js

我正在尝试解析Fountain(编剧)标记文件并为Prism.js编写语法高亮模式。

我需要匹配这样的内容(为清晰起见,包括换行符)

\n
CHARACTER\n
(possible parenthetical line)\n
Dialogue, dialogue blah blah.\n
\n

从Fountain资源中我拉出了与第一行非常匹配的表达式。

(\n)([ \t]*[^<>a-z\s\/\n][^<>a-z:!\?\n]*[^<>a-z\(!\?:,\n\.][ \t]?)\n{1}(?!\n)

我已经尝试了很多东西,但似乎找不到匹配整个文本块的模式,包括可选的括号行,直到两个换行符。

有人能帮我找到正确的模式吗?正则表达式杀了我内心的孩子。

更新 这比我想象的要容易。 JavaScript中缺乏外观仍然给我一些痛苦,但那是另一回事。

([ \t]*[^<>a-z\s\/\n][^<>a-z:!\?\n]*[^<>a-z(!\?:,\n\.][ \t]?)\n(.*(\n))?.*(\n\n)

1 个答案:

答案 0 :(得分:0)

试试这个:

((\n){1}(([ \t]*([A-Za-z0-9 ])+[ \t]?)(\n){1}){1}(([ \t]*(\()*([A-Za-z0-9 ])*(\))*[ \t]?){1}(\n){1})?([ \t]*([A-Za-z0-9.,-_ ])+[ \t]?){1}(\n){1}){1}

分解上述代码:

(\n){1} - 块开头的1个新行是必须的

(([ \t]*([A-Za-z0-9 ])+[ \t]?)(\n){1}){1} - 一行包含字母数字字符和空格。该行可以在末尾用制表符和空格包裹。最后一条新线是必须的。

(([ \t]*(\()*([A-Za-z0-9 ])*(\))*[ \t]?){1}(\n){1})? - 一行包含字母数字字符和空格。它可以用标签和支架包裹;最后还可以包括空格和空格。最后一条新线是必须的。

([ \t]*([A-Za-z0-9.,-_ ])+[ \t]?){1}(\n){1} - 一行包含字母数字字符。它还可以包括逗号,句号,破折号和分数。此块也可以包装在选项卡中,末尾有空格。最后一条新线是必须的。

这应该有效。如果我错过了一些要求,请发表评论,如果可能,我会尽力提供帮助。

干杯, 穆斯塔法