我正在尝试解析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)
答案 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}
- 一行包含字母数字字符。它还可以包括逗号,句号,破折号和分数。此块也可以包装在选项卡中,末尾有空格。最后一条新线是必须的。
这应该有效。如果我错过了一些要求,请发表评论,如果可能,我会尽力提供帮助。
干杯, 穆斯塔法