Javascript JS正则表达式替换SCS中关闭大括号和打开类/id之间的空行
我试图创建一个正则表达式来替换SCSS规则集之间的空行。正则表达式应该从右大括号匹配到类(.)或id(#),并删除所有行。任何不在这些标识之间的空行不应受到影响,包括中间也有类似注释的情况。 我已设置了一个小提琴,可用于测试以下示例: 例子: 之前Javascript JS正则表达式替换SCS中关闭大括号和打开类/id之间的空行,javascript,regex,sass,Javascript,Regex,Sass,我试图创建一个正则表达式来替换SCSS规则集之间的空行。正则表达式应该从右大括号匹配到类(.)或id(#),并删除所有行。任何不在这些标识之间的空行不应受到影响,包括中间也有类似注释的情况。 我已设置了一个小提琴,可用于测试以下示例: 例子: 之前 // START .test1 { background: #FFFFFF; .test2 { background: #FFFFFF; .test3 { backgro
// START
.test1 {
background: #FFFFFF;
.test2 {
background: #FFFFFF;
.test3 {
background: #FFFFFF;
}
}
}
.test5 {
background: #FFFFFF;
}
.test6 {
background: #FFFFFF;
}
// Comment
.test7 {
background: #FFFFFF;
}
之后:
// START
.test1 {
background: #FFFFFF;
.test2 {
background: #FFFFFF;
.test3 {
background: #FFFFFF;
}
}
}
.test5 {
background: #FFFFFF;
}
.test6 {
background: #FFFFFF;
}
// Comment
.test7 {
background: #FFFFFF;
}
到目前为止,我已尝试使用以下方法,但没有成功:
str.replace(/\}(.*?)\./g, '')
您好,您需要像这样捕捉换行符:
output.innerText = str.replace(/^}[\r\n]{2,}(?!\/\/)/gm, '}\n');
它似乎有效,告诉我它是否解决了您的问题解析CSS文件应该使用专用库来完成 下面的解决方案只执行以下操作:它将检测一行,该行等于
}
,后跟1个或多个空格字符,直到以点开头的行。使用它的风险自负
.replace(/^}$\s+^\.\b/gm, '}\n.')
看
详细信息
-行的开头(由于^
修饰符)m
-a}
}
-行尾$
-1个或多个空格\s+
-行的开头^
-一个点(注意:如果您想确保它后面有一些字符,可以使用\.
甚至\b
)\w
var str=document.querySelector('.string').innerText;
var output=document.querySelector('.output');
output.innerText=str.replace(/^}$\s+^\.\b/gm,'}\n.)代码>
输入:
//开始
.test1{
背景:#FFFFFF;
.test2{
背景:#FFFFFF;
.test3{
背景:#FFFFFF;
}
}
}
.test5{
背景:#FFFFFF;
}
.test6{
背景:#FFFFFF;
}
//评论
.test7{
背景:#FFFFFF;
}
输出:
如果要删除空行,为什么不在正则表达式中使用\n
或\r?\n
?
与JS regex中的CR和LF都不匹配。顺便说一句,您至少可以尝试\s
匹配任何空格。此外,使用正则表达式进行CSS解析不能100%安全。使用一些CSS解析器将是一个好主意。我需要它比任何空行更具体,如果中间有注释,或者如果是打开规则集,则该行应该保留。这可以在示例中看到,cheersOk,try-这只适用于CSS文件格式良好的情况-结束符}
是一行中的单个字符,下一个CSS类点是一行中的第一个字符。感谢您的建议,它似乎不起作用。但是:您没有从小提琴中使用我的正则表达式(我忘了在我的评论中添加m
修饰符。)。它是。如果没有m
,^
匹配字符串的开头,而不是行的开头。它将不起作用,因为它将删除注释前的空行。好的,我只是编辑我的帖子,告诉我它是否对您有效刚刚意识到这对SCS中的嵌套规则不起作用,猜测}不是行的开头?试试看。如果是这样的话更复杂的是,请接受我的建议,开始使用CSS解析器。