Javascript正则表达式替换-出现随机数

Javascript正则表达式替换-出现随机数,javascript,css,regex,string,replace,Javascript,Css,Regex,String,Replace,我的目标: 我试图解析css字符串以检索不同的部分,如css规则、导入、注释等 我所做的: 我的函数首先检索注释,然后检索导入,最后检索规则块检索这些部件后,每个部件都会记录到控制台 我的问题: 我的问题是,当我测试它时,当规则块部分被记录到控制台时,我的代码似乎会生成随机数 我的代码: 函数输出(css){ 如果(css的类型=='string'){ var电流=css; //删除评论 var注释=[]; 当前=当前。替换(/\s*\/\*[^*]*\*+([^/*][^*]*\*+)*\/

我的目标:
我试图解析css字符串以检索不同的部分,如css规则、导入、注释等

我所做的:
我的函数首先检索注释,然后检索导入,最后检索规则块
检索这些部件后,每个部件都会记录到控制台

我的问题:
我的问题是,当我测试它时,当规则块部分被记录到控制台时,我的代码似乎会生成随机数

我的代码:
函数输出(css){
如果(css的类型=='string'){
var电流=css;
//删除评论
var注释=[];
当前=当前。替换(/\s*\/\*[^*]*\*+([^/*][^*]*\*+)*\/\\/[^\n]*\n?/gim,c=>comments.push(c.trim());
//检索@imports
var导入=[];
current=current.replace(/@[^;{]+;/gi,imp=>imports.push(imp.trim());
//检索规则块
var rulesBlocks=[];
当前=当前。替换(/[^};]+{[^{]*}/gi,块=>{
rulesBlocks.push(block.trim());
});
日志(注释、导入、规则块);
}
}
var css=document.getElementById('css').innerText;
输出(css);

#id,.class{
#身份证{
}
}
/**
*/
@导入url('http://www.test.com/test.min.js/');
/*
@导入url('http://www.test.com/test.min.js/');
*/
/***/
//#id,.class{
#id,.class{
#身份证{
& {
}
}
}
#id,.class{
#身份证{
}
}
声明{
资料:试验;
}
声明2声明{
数据
}
@字体{
字体系列:myFirstFont;
src:url(sansation_light.woff);
}
@字体{
字体系列:myFirstFont;
src:url(sansation_light.woff);
}
因为数组返回数组的新长度,并且您使用该返回值作为数组的长度

可以将函数指定为第二个参数。在这种情况下,将在执行匹配后调用函数。函数的结果(返回值)将用作替换字符串

因此:

current=current.replace(//[^;{]+;/gi,imp=>imports.push(imp.trim());

将用新长度的
imports
替换表达式的每个实例


如果您想避免这个问题,您可以在push之后添加
&&“
的注释中使用Washington Guedes的建议,或者在replace函数中使用
返回imp
(等等),或者重写函数以使用更惯用的方法。

这是因为
数组.push()
方法返回数组的长度,您的替换正在执行。您可以在push方法之后添加
&&“
,然后它将按预期工作。不要使用regexp解析CSS。使用CSS解析器。@torazaburo为什么我应该使用CSS解析器而不是regex?什么是CSS解析器?Google“CSS解析器”。