javascript - 匹配所有字符直到下一次匹配的正则表达式

标签 javascript regex parsing

我正在解析由一个简单模式重复多次的文本。文本采用剧本格式,如下所示:

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},它工作正常(下面的解释),除非 Angular 色的语音中有换行符。发生这种情况时, Angular 色的名字会被成功捕获,但只会捕获语音的第一行。

打开单行模式(在 . 中包含换行符)只会创建一个巨大的匹配。

如何让 (.+) 在找到下一个字符名称时停止并结束匹配?
我正在逐个迭代每个匹配项 (JavaScript),因此该名称必须可用于下一个匹配项。

理想情况下,我能够匹配所有字符,直到整个模式被重复。


模式解释:

第一组匹配一个字符的名称(允许大写字母、数字和空格),(尾随冒号和空格可选)。
第二组( Angular 色的语音)从一个新行开始并捕获任何字符(除了有问题的换行符和它们之后的字符)。
该模式在空行后结束(并重新开始)。

最佳答案

考虑换个方向。你真的想在任何包含名字的行上拆分一个更大的对话。您仍然可以使用正则表达式来执行此操作(将正则表达式替换为与“speaker”行匹配的任何内容):

results = "Insert script here".split(/^([A-Z]+)$/)

在符合标准的实现中,您的示例文本将以数组形式结束,如下所示:

results[0] = ""
results[1] = "SAMPSON"      
results[2] = "I mean, an we be in choler, we'll draw.            
"
results[3] = "GREGORY"      
results[4] = "Ay, while you live, draw your neck out o' the collar. "

需要注意的是,大多数浏览器在此处的标准上参差不齐。您可以使用图书馆 XRegExp获得跨平台行为。

关于javascript - 匹配所有字符直到下一次匹配的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10369341/

相关文章:

java - 正则表达式 - 使用匹配组

c# - 解析多行固定格式文本文件

javascript - 如何显示日期,如结束日期, future 日期取决于开始日期

javascript - 我可以通过 Prop 传递要使用的对象名称吗?

php - 俄语正则表达式

javascript - 使用 Node 验证器从字符串中去除 HTML 标签

python - 如何在 Python 中将电子邮件地址/密码字符串一分为二?

sql - 如何使用 TSQL 从字符串中提取数字

javascript - jQuery Json 按 json 值中最高数字排序列表

javascript - 如何在不删除整个页面的情况下使用 javascript 向我的 html 添加内容