更改现有文件的某些内容而不删除节点js中文件中的其他内容
Change some contents of an existing file without deleting the other contents in the file in node js
我的目标是改变
的颜色
.made-easy-theme{
color:black
}
在 css 文件中使用另一种颜色。但是当我使用 fs.writeFile 更改颜色时,它会删除 css 文件中的所有其他内容并仅替换
.made-easy-theme{
color:black
}
在更改颜色之前,css 文件包含以下内容,
@charset "utf-8";
@import url(http://fonts.googleapis.com/css?family=Lato:300,400,700);
@import url(http://weloveiconfonts.com/api/?family=entypo);
/* entypo */
[class*="entypo-"]:before {
font-family: 'entypo', sans-serif;
}
.made-easy-theme{
color:black
}
* {
box-sizing: border-box;
}
.toggler {
color: #A1A1A4;
font-size: 1.25em;
margin-left: 8px;
text-align: center;
cursor: pointer;
}
.toggler.active {
color: #000;
}
.cardss {
list-style: none;
padding-right: 10px;
padding-left: 10px;
text-align: left;
-webkit-overflow-scrolling: touch;
max-width: 100%;
-webkit-backface-visibility: hidden;
}
但改变颜色后它只包含,
.made-easy-theme{color:hsl(0, 22%, 51%)}
hsl(0, 22%, 51%)(我从客户端收到的颜色)。
我的 js 文件包含更改 css 文件的代码,如下所示,
var main = 'temp/' + userId + '/templates/' + appId + '/css/main.css';
var color = req.body.color;
function replaceThemecolor(color) {
fs.readFile(main, 'utf-8',
function (err, data) {
var searchStr = ".made-easy-theme{color:black}";
console.log(searchStr);
var result = searchStr.replace(new RegExp('black', ''), color);
fs.writeFile(main, result, 'utf-8', function (err) {
console.log("kk");
console.log(color);
console.log(result);
if (err) return console.log(err);
});
});
}
我认为问题出在 fs.writeFile 方法上。我不知道如何获得正确的输出。
让我们看看这一行:
var result = searchStr.replace(new RegExp('black', ''), color);
它正在缩小 result
变量的范围,只在 searchStr
中替换模式 最初声明为:
var searchStr = ".made-easy-theme{color:black}";
所以在fs.writeFile
中,result
然后写入文件。
您当前的代码存在多个问题:
您正在读取文件内容,但未对其执行任何操作。您只是在静态字符串上进行替换,因此忽略了原始文件内容。
您的正则表达式仅查找与文件中任何位置匹配的黑色,但在您更改后将不匹配。
我想你想要这样的东西,使正则表达式只匹配该规则中的颜色。您可以根据需要使正则表达式尽可能复杂。我在这里展示的内容足够灵活,可以支持 .made-easy-theme
规则中的其他样式。它只会挑出 color
规则来改变。它假定颜色由名称指定,例如 "black".
var main = 'temp/' + userId + '/templates/' + appId + '/css/main.css';
var color = req.body.color;
function replaceThemecolor(color) {
fs.readFile(main, 'utf-8', function (err, data) {
var regex = /(\.made-easy-theme\s*{[^}]*color\s*:\s*)([^\n;}]+)([\s*;}])/;
var result = data.replace(regex, "" + color + "");
console.log(result);
console.log(color);
fs.writeFile(main, result, 'utf-8', function (err) {
if (err) return console.log(err);
});
});
}
这是一个没有实际文件操作的文本块的工作演示:http://jsfiddle.net/jfriend00/e6923rqe/
我的目标是改变
的颜色.made-easy-theme{
color:black
}
在 css 文件中使用另一种颜色。但是当我使用 fs.writeFile 更改颜色时,它会删除 css 文件中的所有其他内容并仅替换
.made-easy-theme{
color:black
}
在更改颜色之前,css 文件包含以下内容,
@charset "utf-8";
@import url(http://fonts.googleapis.com/css?family=Lato:300,400,700);
@import url(http://weloveiconfonts.com/api/?family=entypo);
/* entypo */
[class*="entypo-"]:before {
font-family: 'entypo', sans-serif;
}
.made-easy-theme{
color:black
}
* {
box-sizing: border-box;
}
.toggler {
color: #A1A1A4;
font-size: 1.25em;
margin-left: 8px;
text-align: center;
cursor: pointer;
}
.toggler.active {
color: #000;
}
.cardss {
list-style: none;
padding-right: 10px;
padding-left: 10px;
text-align: left;
-webkit-overflow-scrolling: touch;
max-width: 100%;
-webkit-backface-visibility: hidden;
}
但改变颜色后它只包含,
.made-easy-theme{color:hsl(0, 22%, 51%)}
hsl(0, 22%, 51%)(我从客户端收到的颜色)。 我的 js 文件包含更改 css 文件的代码,如下所示,
var main = 'temp/' + userId + '/templates/' + appId + '/css/main.css';
var color = req.body.color;
function replaceThemecolor(color) {
fs.readFile(main, 'utf-8',
function (err, data) {
var searchStr = ".made-easy-theme{color:black}";
console.log(searchStr);
var result = searchStr.replace(new RegExp('black', ''), color);
fs.writeFile(main, result, 'utf-8', function (err) {
console.log("kk");
console.log(color);
console.log(result);
if (err) return console.log(err);
});
});
}
我认为问题出在 fs.writeFile 方法上。我不知道如何获得正确的输出。
让我们看看这一行:
var result = searchStr.replace(new RegExp('black', ''), color);
它正在缩小 result
变量的范围,只在 searchStr
中替换模式 最初声明为:
var searchStr = ".made-easy-theme{color:black}";
所以在fs.writeFile
中,result
然后写入文件。
您当前的代码存在多个问题:
您正在读取文件内容,但未对其执行任何操作。您只是在静态字符串上进行替换,因此忽略了原始文件内容。
您的正则表达式仅查找与文件中任何位置匹配的黑色,但在您更改后将不匹配。
我想你想要这样的东西,使正则表达式只匹配该规则中的颜色。您可以根据需要使正则表达式尽可能复杂。我在这里展示的内容足够灵活,可以支持 .made-easy-theme
规则中的其他样式。它只会挑出 color
规则来改变。它假定颜色由名称指定,例如 "black".
var main = 'temp/' + userId + '/templates/' + appId + '/css/main.css';
var color = req.body.color;
function replaceThemecolor(color) {
fs.readFile(main, 'utf-8', function (err, data) {
var regex = /(\.made-easy-theme\s*{[^}]*color\s*:\s*)([^\n;}]+)([\s*;}])/;
var result = data.replace(regex, "" + color + "");
console.log(result);
console.log(color);
fs.writeFile(main, result, 'utf-8', function (err) {
if (err) return console.log(err);
});
});
}
这是一个没有实际文件操作的文本块的工作演示:http://jsfiddle.net/jfriend00/e6923rqe/