朋友项目中遇到一个问题,在style中提取出样式名和样式的内容,然后在其他地方使用。之前没有遇到过,经过考虑进行了一下的处理,代码如下:
let str=`.c-1 {
color: #fff;
}
.c-2 {
color: #666;
}
.c-3 {
color: #999;
}
.c-1, .c-2, .c-3 {
color: #eee;
}`;
let classNames=[]
let classes=[]
let classObj={}
var res=str.match(/[\.][\w\-]+/ig);
if(res && res.length>0){
for(let item of res){
if(!classNames.includes(item)){ // 去除重复的样式名
classNames.push(item)
}
}
}
console.log('classNames',classNames)
// 打印classNames 为数组.c-1 .c-2 .c-3
// 将所有样式插入数组classes
var res3=str.match(/(\.[\w\-\,]+(\s)*)*\{([^}\.])*}/ig);
classes.push(...res3)
for(let name of classNames){
//classObj[name]=""
let inname=classes.filter(x=>x.indexOf(name)>=0) // 根据样式名,将所有涉及的样式选取出来,拼接新的样式
let allstype=""
if(inname && inname.length>0){
for(let style of inname){
let res4=style.match(/\{([^}\.])*}/g);
if(res4 && res4.length>0){
allstype = allstype + res4[0].replace("{","").replace("}","")
}
}
// 将样式名和样式放入对象中
classObj[name]=allstype
}
}
暂时想到的处理方式,如果大家有更好的方式,欢迎交流!