Skript - 获取代码组件的主体

Skript - Get the body of the code component

我正在为 vs code 开发一个扩展,它增加了对 Skript 语法的支持。

我一直坚持我不能 select 代码块的主体。总的来说,Skript 语法中有几个(命令、函数、事件等等)。每个块都以零缩进开始(缩进敏感)。我在下面提供了一个 Skript 语法示例。

on join:
    set the player's gamemode to spectator
    join_player(player)

command /join [<player>]:
    trigger:
        if arg-1 is not set:
            join_player(player)
        else:
            player has permission "op"
            join_player(arg-1)

function reset_arena():
    set all blocks within {loc1} and {loc2} to snow block

这个扩展的原作者使用了这个结构。但它不适用于奇数 (\r\n|\r|\n)。还将文档的最后一行定义为与最后一个组件无关。

if (search = component.match(/^(?<component>(command\s?(?<head>[^\:]*))\:?(.*)(?<body>((\r\n|\r|\n)([^a-zA-Z][^\r\n]*)?)*))/i)?.groups) {
    return this._createCommand(skDocument, range, search.component, search.head, search.body);  
}

请告诉我如何正确制作正则表达式,以便 select 编辑组件的主体。非常感谢

我相信你需要这样的东西:

(?<component>^\w+ +(?<head>.*)\n(?<body>(?:[\s\S](?!\n\w))*))

It will provide 3 groups for each match:

  1. component
  2. head
  3. body

您可以更好地了解它的工作原理,并在以下内容中进行您可能需要的任何修改link:https://regex101.com/r/0VaKhR/2