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:
- component
- head
- body
您可以更好地了解它的工作原理,并在以下内容中进行您可能需要的任何修改link:https://regex101.com/r/0VaKhR/2
我正在为 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:
- component
- head
- body
您可以更好地了解它的工作原理,并在以下内容中进行您可能需要的任何修改link:https://regex101.com/r/0VaKhR/2