Regex 用于捕获第一次迭代的正则表达式
我有几个字符串要用regex提取name。整个名称与字符串的任何其他部分一样位于一个或多个管道中 每个字符串可能为空,有些示例: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
"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}`; }; }