我正在创建一个能够读取环境文件的脚本。内容如下:
var1 = 'test'
var2='test2'
var1= 'test'
var3 = 4
我想提取密钥和值,例如:
var1 = 'test' -> result[0]: var1, result[1]: test
如何编写一个函数,可以测试用readFile
读取的行是否有效,然后是key
(例如var1)和value
(例如test)?是否可以在不运行两个正则表达式函数的情况下使用regexp提取键和值?
答案 0 :(得分:1)
读取行..将引号替换为null
//line = "var1 = 'test'";
line = line.replace(/'/g, "");
按分隔符=
分割
var result = line.split("=");
//result is an array containing "var1" and "test"
line = "var1 = 'test'";
line = line.replace(/'/g, "");
var result = line.split("=");
document.write("key => "+result[0].trim());
document.write(": value => "+result[1].trim());
答案 1 :(得分:1)
您可以尝试以下JS代码:
function validate(str)
{
var re = /^(\w+)\s*\=\s*(['"]?)(.*?)\2$/;
if ((m = re.exec(str)) !== null) {
return [m[1], m[3]];
}
}
document.getElementById("res").innerHTML =
"Result [0]: " + validate("var1 = 'test'")[0] + "<br>Result [1]: " + validate("var1 = 'test'")[1];
&#13;
<div id="res"/>
&#13;
答案 2 :(得分:1)
存储完行后,您可以执行以下操作:
// line is the line you are processing, object is where you save your stuff
function processLine(line, object) {
var parts = line.split("=");
if (parts.length<2)
return;
// key is parts[0], value is parts[1]
var key = parts.shift();
// if we have equal signs in our value, they will be preserved
var value = parts.join("=");
// get rid of any trailing or preceding spaces
key = key.trim();
value = value.trim();
// is the value a quoted string?
if ((value.charAt(0)==="'" && value.charAt(value.length-1)==="'") ||
(value.charAt(0)==='"' && value.charAt(value.length-1)==='"'))
value = value.slice(1, value.length-1);
// otherwise we assume it's a number
else
value = parseFloat(value);
// TODO: you can check for other stuff here, such as 'true', 'false' and 'null'
// finally, assign it to your object
object[key] = value;
}
现在你只需要为每一行调用你的函数,例如:
var values = {};
for (var i in lines)
processLine(lines[i], values);
这种方法的注意事项很多。可以使用一些额外的代码轻松修复它们,但我建议使用类似JSON的东西来定义配置值(如果它们是这样的话)。在javascript中有JSON解析的原生支持,所以你可以使用它。也许你应该重新考虑你的方法。