我正在使用一种诱人的语言,支持使用特殊分隔符更改范围,如下所示:
%% scope Foo %%
Stuff
%% end %%
块可以无限期嵌套:
%% scope Foo %%
Stuff in the Foo namespace
%% scope Bar %%
Stuff in the bar namespace
%% end %%
%% end %%
在textarea中编辑其中一个模板时,我想运行一个Javascript函数来报告当前范围。当前行号和光标位置已知,可以传递给函数。
换句话说,使用上面的例子,如果我的光标在第二行的任何地方,该函数应该记录'Foo'。同样,如果我在第4行,它应该记录'Bar'。如果我在第三行的最开头(在%%之前),它应该记录“Foo”。
答案 0 :(得分:0)
这可能对您有用:
value = "%% scope Foo %% \nStuff in the Foo namespace\n %% scope Bar %% \n Stuff in the bar namespace \n %% end %% \n%% end %%" // the value of the text area
cursor= Math.round(Math.random() * value.length) //just to get a random cursor position for testing
console.log(logTag(cursor,value), cursor); // should be foo or bar
function logTag (pos,string) {
string = string.slice(0,pos);
string = string.match(/%%\s*scope\s*(\w*)\s*%%/g);
string = string[string.length - 1].match(/%%\s*scope\s*(\w*)\s*%%/)[1];
return string;
}
此函数只获取所有%% scope <something> %%
并返回最新的,这是用户输入的范围。可以忽略这些空格。并且只能包含字母数字和下划线。