从 .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 项目可能有一个解析器可以为您工作。
我正在使用 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 项目可能有一个解析器可以为您工作。