模板语言,确定当前范围

时间:2011-10-16 02:29:28

标签: javascript regex scope templating

我正在使用一种诱人的语言,支持使用特殊分隔符更改范围,如下所示:

%% 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”。

1 个答案:

答案 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> %%并返回最新的,这是用户输入的范围。可以忽略这些空格。并且只能包含字母数字和下划线。