我将解析一个由简单模式重复多次组成的文本。这个文本是一个剧本的格式,例如:
SAMPSON
I mean, an we be in choler, we'll draw.
GREGORY
Ay, while you live, draw your neck out o' the collar.
我目前使用的模式是([A-Z0-9\s]+)\s*\:?\s*[\r\n](.+)[\r\n]{2}
,这个模式很好用(下面会解释),但只有当字符的对话中没有换行时才有效。当出现换行时,成功捕获角色名称,但只捕获对话的第一行。
打开单行模式(包括.
中的换行符)只会创建一个巨大的匹配。
如何告诉(.+)
在找到下一个字符名称并结束匹配时停止?
我正在逐个匹配每个匹配项(JavaScript),所以下一个匹配需要知道名称。
理想情况下,我希望能够匹配所有人物,直到整个模式重复。
模式说明:
第一组匹配人物名称(允许大写字母、数字和空格),(尾随冒号和空格可选)。
第二组(人物的对话)从新行开始捕获任何字符(除了问题是换行符和其后面的字符)。
模式在空行后结束(并重新开始)。