代码之家  ›  专栏  ›  技术社区  ›  Brandon

正则表达式用于匹配特定行上的单词

  •  2
  • Brandon  · 技术社区  · 1 年前

    从ObjectScript中的类定义中给出以下示例:

    Include %sySystem
    Include (%sySystem, %soap, %Net.WebSocket)
    
    Class HS.Local.zimpl.fhirpro.UI.FileViewer Extends (HS.Local.zimpl.fhirpro.UI.Super, %CSP.Page)
    

    我需要匹配“Include”后面的单个单词,并且该模式在任何其他行上都不能匹配。匹配必须排除任何标点符号。

    正则表达式将在Javascript中使用。

    我尽了最大的努力:

    (?<=^Include \(?)([%A-Za-z0-9.]+)|((?<=, )[%A-Za-z0-9.]+)
    

    正向查找会找到以“Include”开头的行,以及可选的左括号,匹配可能包含百分号或句点的单词。

    为了匹配更多的单词,我添加了替代的OR和第二个带有进一步背景的捕获组。这导致许多其他行被匹配——基本上是逗号和空格后面的任何行。

    2 回复  |  直到 1 年前
        1
  •  3
  •   Wiktor Stribiżew    1 年前

    这个 (?<=^Include \(?) lookbehind只适用于正则表达式模式中的第一种选择。

    使其适用于与您的主单词匹配的任何“单词” [%A-Za-z0-9.]+ 您需要添加的模式 .* 里面:

    /(?<=^Include .*)[%A-Za-z0-9.]+/gm
    /(?<=^Include .*)[%a-z0-9.]+/gmi
    

    请参阅 regex demo .我删除了 )? 从背后看,因为 .* 匹配a ) 符号,也是。

    请注意,如果“单词”总是以 % ,您可以使用 %[A-Za-z0-9.]+ 而不是 [%A-Za-z0-9.]+ .

    更多详情 :

    • (?<=^Include .*) -一个正面的后视镜,与前面紧接着的位置相匹配 Include 在行首(如果删除 m 标志,然后仅显示整个字符串的开头),然后后跟空格和除换行符之外的任何零个或多个字符
    • [%A-Za-z0-9.]+ -一个或多个ASCII字母、数字和 . % 字符。