JavaScript正则匹配ObjectScript中Include行的指定单词
解决ObjectScript Include行单词匹配的正则问题
问题分析
你之前的正则表达式(?<=^Include \(?)([%A-Za-z0-9.]+)|((?<=, )[%A-Za-z0-9.]+)存在的问题是:第二个分支(?<=, )[%A-Za-z0-9.]+没有限定匹配范围为以Include开头的行,导致会误匹配其他行(比如Class行)中逗号空格后的符合规则的单词。
修正后的正则表达式
适用于JavaScript环境的正确正则如下:
/(?<=^Include(?:\s*\(| |.*?, ))[%A-Za-z0-9.]+/gm
正则说明
gm标志:g表示全局匹配所有符合条件的结果,m表示多行模式,让^可以匹配每一行的开头。- 正向预查部分:
(?<=^Include(?:\s*\(| |.*?, ))确保匹配的单词必须处于以Include开头的行内,覆盖三种场景:^Include\s*\(:行首为Include后接零个或多个空格加左括号(对应Include (...)格式)^Include:行首为Include后接单个空格(对应Include %sySystem格式)^Include.*?,:行首为Include后接任意内容(非贪婪匹配)加逗号空格(对应行内逗号分隔的后续单词)
- 匹配目标:
[%A-Za-z0-9.]+匹配包含%、字母、数字、点号的合法ObjectScript包含项名称。
测试效果
针对你的示例代码:
Include %sySystem Include (%sySystem, %soap, %Net.WebSocket) Class HS.Local.zimpl.fhirpro.UI.FileViewer Extends (HS.Local.zimpl.fhirpro.UI.Super, %CSP.Page)
匹配结果为:%sySystem、%sySystem、%soap、%Net.WebSocket,不会误匹配%CSP.Page。
内容的提问来源于stack exchange,提问作者Brandon
相关产品推荐
相关产品推荐

