Node.js:逐行替换文本文件中模式的第二部分

时间:2014-09-16 10:41:06

标签: javascript regex node.js

我的文件较少,内容如下:

@background: #345602;
@imgBack: #000;

我可以将整个文本文件读入变量,后者保存修改文件的变量内容:

var lessStr = grunt.file.read('./myLessFile.less');

现在我想将变量,例如@imgBack更改为#ff0000。因此,修改后的文件看起来像:

@background: #345602;
@imgBack: #ff0000;

我有没有办法通过正则表达式匹配和替换?请帮忙。

修改

我的代码如下:

var str = '@black:                 #000;\n@grayDarker:            #222;\n@grayDark:              #333;\n@gray:                  #555;\n@grayLight:             #999;';
var varName = '@black';
var replace = '#ab4564';
var regex = '(' + varName + ':\\s*)(?:#[a-z0-9]+)(.*)$';
var re = new RegExp(regex, 'm');
var replaceStr = '$1' + replace;
str.replace(re, replaceStr);
console.log(str);

但它没有用。我弄错了什么。

2 个答案:

答案 0 :(得分:1)

我认为你的意思是,

> var str = "@background: #345602;\n@imgBack: #000;";
> str.replace(/^(@imgBack:\s*#).*$/gm, "$1ff0000;");
'@background: #345602;\n@imgBack: #ff0000;'

更新

> var str = '@black:                 #000;\n@grayDarker:            #222;\n@grayDark:              #333;\n@gray:                  #555;\n@grayLight:             #999;';
undefined
> var varName = '@black';
> var regex = '(' + varName + ':\\s*)(?:#[a-z0-9]+)(.*)$';
undefined
> var re = new RegExp(regex, 'm');
> var replace = '#ab4564';
undefined
> var replaceStr = "$1" + replace;
undefined
> str.replace(re, replaceStr);
'@black:                 #ab4564\n@grayDarker:            #222;\n@grayDark:              #333;\n@gray:                  #555;\n@grayLight:             #999;'

答案 1 :(得分:0)

(@imgBack:\s*#)(?:\d+)(.*)$

你可以使用this.Replacement字符串。

$1#ff0000$2

参见演示。

http://regex101.com/r/iO1uK1/6