Javascript JS正则表达式替换SCS中关闭大括号和打开类/id之间的空行

Javascript JS正则表达式替换SCS中关闭大括号和打开类/id之间的空行,javascript,regex,sass,Javascript,Regex,Sass,我试图创建一个正则表达式来替换SCSS规则集之间的空行。正则表达式应该从右大括号匹配到类(.)或id(#),并删除所有行。任何不在这些标识之间的空行不应受到影响,包括中间也有类似注释的情况。 我已设置了一个小提琴,可用于测试以下示例: 例子: 之前 // START .test1 { background: #FFFFFF; .test2 { background: #FFFFFF; .test3 { backgro

我试图创建一个正则表达式来替换SCSS规则集之间的空行。正则表达式应该从右大括号匹配到类(.)或id(#),并删除所有行。任何不在这些标识之间的空行不应受到影响,包括中间也有类似注释的情况。 我已设置了一个小提琴,可用于测试以下示例:

例子: 之前

// 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
    }
  • $
    -行尾
  • \s+
    -1个或多个空格
  • ^
    -行的开头
  • \.
    -一个点(注意:如果您想确保它后面有一些字符,可以使用
    \b
    甚至
    \w
下面是一个JS演示:

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解析器。