从 .LESS 标记中获取变量

Get variables from .LESS markup

我正在使用 ASP.NET MVC 5 并想创建一个页面,以文本框的形式列出 .less 文件的变量及其值。我的目标是制作一个小页面,让您可以编辑它们的值。

 public JsonResult GetLessVariables()
    {
        var file = System.IO.File.ReadAllText("~/some.less");

        /*  
            Create key value pair of variable and value from file
                i.e
                   @body-color, #000000
                   @text-color, #ffffff
        */

        return Json(data, JsonRequestBehavior.AllowGet);
    }

是否有一些简单的方法可以将它们放入键值对字典或类似的字典中?

编辑:.less 文件示例:

//
// Test
// --------------------------------------------------

    @body-color:     #000000;
    @text-color:     #ffffff;


    // Test
    .test {
        background: @body-color;
        color: @text-color;
    }
    ....  and so on

如果文件只包含变量定义,您可以使用快速简单的正则表达式匹配变量:

var regex = new Regex(@"(?<name>@\w+)\s*:\s(?<value>[^;]+;");

var less = File.ReadAllText("style.less"));

var matches = regex.Matches(less);
var parameters = new List<KeyValuePair<string, string>>();
foreach (var match in matches.Cast<Match>())
{
    parameters.Add(new KeyValuePair<string, string>(
        match.Groups["name"].Value,
        match.Groups["value"].Value));
}

未经测试,可能需要调整,但如果您可以保持标记简单就足够了。如果你添加一个约束来匹配整行,你可能可以在你的样本中使用 运行 它,但是你冒着捕获嵌套在不同范围的变量的风险 - 正则表达式不是复杂语法的好工具。

如果您不能将变量移动到它们自己的文件或添加约束,您将不得不使用更复杂的语法分析器来提取变量声明语句。

DotLess 项目可能有一个解析器可以为您工作。