Regex 用于捕获第一次迭代的正则表达式

Regex 用于捕获第一次迭代的正则表达式,regex,regex-lookarounds,regex-group,regex-greedy,Regex,Regex Lookarounds,Regex Group,Regex Greedy,我有几个字符串要用regex提取name。整个名称与字符串的任何其他部分一样位于一个或多个管道中 每个字符串可能为空,有些示例: "Women's College Hospital|76 Grenville Street|ACTT Clinic 6 East|Toronto ON M5S 1B2" "" "Health and Wellness Center|University of Toronto|214 College Street, Room 111|Toronto ON M5T

我有几个字符串要用regex提取name。整个名称与字符串的任何其他部分一样位于一个或多个管道中

每个字符串可能为空,有些示例:

"Women's College Hospital|76 Grenville Street|ACTT Clinic 6 East|Toronto ON  M5S 1B2"

""

"Health and Wellness Center|University of Toronto|214 College Street, Room 111|Toronto ON M5T 2Z9"

"Royal Health Care Centre|130 Adelaide St. West|Lower Concourse|P.O.Box 92|Toronto ON  M5H 3P5"

"Suite 1038|790 Bay Street|P.O. Box 51|Toronto ON  M5G 1N8
M5G 1N8"

"P.O. Box 19569|Toronto ON  M4W3T9"
我有这个正则表达式

^(.*\|)*((?i).*(room|st.|street|road|avenue|P.O.|St.).*\|(?-i).*)$

如果字符串中只有一个匹配项,则可以很好地分组

但是,如果存在多个迭代或其他匹配,它将使用 最后一次迭代或最后一次匹配

例如,对于字符串

"Sleep & Alertness Clinic|790 Bay street |Suite 800| st. 32|Toronto ON  M5G 1N8"
结果是:

第一组。睡眠与警觉诊所|海湾街790号| 第2组。多伦多M5G 1N8街32号800套房 我想要的是:

第一组。睡眠与警觉诊所| 第2组。多伦多湾街790号,32街800号套房,M5G 1N8
在正则表达式中,您可以在.*中添加问号,使其不贪婪,并在第一次匹配后停止

^(.*?(?:room|st\.|street|road|avenue|P\.O\.)[^|]*)(.*)$

在正则表达式中,您可以在.*中添加问号,使其不贪婪,并在第一次匹配后停止

^(.*?(?:room|st\.|street|road|avenue|P\.O\.)[^|]*)(.*)$

您要查找的表达式可能非常简单:

"(.*?)\|(.*)"

你很可能不需要,也不需要锚和^,但是如果你出于某种原因想要它们,那么也要考虑添加其他边界。

正则表达式 您可以在中设计/修改/更改表达式

正则表达式电路 您可以在以下位置可视化您的表达式:

JavaScript测试 常量正则表达式=/.\\\..*/gmi; const str=`女子学院医院|格伦维尔街76号| ACTT诊所6东|多伦多M5S 1B2 健康与健康中心|多伦多大学|学院街214号,111室|多伦多M5T 2Z9 皇家医疗中心|阿德莱德街西130号|下广场|邮政信箱92号|多伦多M5H 3P5 多伦多湾街790号1038室M5G 1N8邮政信箱51号M5G 1N8 邮政信箱19569 |多伦多M4W3T9 睡眠与警觉诊所|湾街790号| 800室|街32号|多伦多M5G 1N8 `; 让m; 而m=regex.execstr!==空的{ //这是避免具有零宽度匹配的无限循环所必需的 如果m.index==regex.lastIndex{ regex.lastIndex++; } //可以通过'm`-变量访问结果。 m、 forEachmatch,groupIndex=>{ log`find match,group${groupIndex}:${match}`; };
} 您要查找的表达式可能非常简单:

"(.*?)\|(.*)"

你很可能不需要,也不需要锚和^,但是如果你出于某种原因想要它们,那么也要考虑添加其他边界。

正则表达式 您可以在中设计/修改/更改表达式

正则表达式电路 您可以在以下位置可视化您的表达式:

JavaScript测试 常量正则表达式=/.\\\..*/gmi; const str=`女子学院医院|格伦维尔街76号| ACTT诊所6东|多伦多M5S 1B2 健康与健康中心|多伦多大学|学院街214号,111室|多伦多M5T 2Z9 皇家医疗中心|阿德莱德街西130号|下广场|邮政信箱92号|多伦多M5H 3P5 多伦多湾街790号1038室M5G 1N8邮政信箱51号M5G 1N8 邮政信箱19569 |多伦多M4W3T9 睡眠与警觉诊所|湾街790号| 800室|街32号|多伦多M5G 1N8 `; 让m; 而m=regex.execstr!==空的{ //这是避免具有零宽度匹配的无限循环所必需的 如果m.index==regex.lastIndex{ regex.lastIndex++; } //可以通过'm`-变量访问结果。 m、 forEachmatch,groupIndex=>{ log`find match,group${groupIndex}:${match}`; }; }