我需要根据某些关键字在设置文件中获取信息(我无法更改格式)。文件是这样的:
username=myusername
address=156a1355e3486f4
data=function(i){if (i!=0) return true; else return false;}
系统为<key>
=
<value>
\n
。值部分中可以有=
,空格或其他字符,但绝不会换行。密钥是唯一的(在“关键部分”中,它们可以显示在值中,但\nkey=
只在文件中出现一次,用于每个密钥。)
使用shell脚本,我发现我的值如下:
username=`grep ^username file.txt | sed "s/^username=//"`
Grep会返回username=someusername
并且sed会替换密钥而=
什么都没有,只留下值。
在node.js中,我想访问文件中部分的数据。例如,我想要地址和数据的值。
我怎么能在node.js中这样做?在fs.readFile(file.txt)
之后我不知道该怎么做。我想我必须使用split
,但使用\n
似乎不是最好的选择,也许正则表达式可以帮助?
理想的做法是“找到以\nkey=
开头并以第一个\n
结尾的子字符串”,然后我可以轻松拆分以找到该值。
答案 0 :(得分:1)
// @text is the text read from the file.
// @key is the key to find its value
function getValueByKey(text, key){
var regex = new RegExp("^" + key + "=(.*)$", "m");
var match = regex.exec(text);
if(match)
return match[1];
else
return null;
}
示例:强>
// text should be obtained using fs.readFile...
var text = "username=myusername\naddress=156a1355e3486f4\ndata=function(i){if (i!=0) return true; else return false;}";
function getValueByKey(text, key){
var regex = new RegExp("^" + key + "=(.*)$", "m");
var match = regex.exec(text);
if(match)
return match[1];
else
return null;
}
console.log("adress: ", getValueByKey(text, "address"));
console.log("username: ", getValueByKey(text, "username"));
console.log("foo (non exist): ", getValueByKey(text, "foo"));
答案 1 :(得分:0)
使用split
和reduce
,您可以执行以下操作:
fs.readFile('file.txt', { encoding : 'utf8' }, data => {
const settings = data
.split('\n')
.reduce((obj, line) => {
const splits = line.split('=');
const key = splits[0];
if (splits.length > 1) {
obj[key] = splits.slice(1).join('=');
}
return obj;
}, {});
// ...
});
您的设置将作为键/值存储在settings
对象中。