我正在尝试创建一个正则表达式来替换SCSS规则集之间的空行。正则表达式应该从一个结束的大括号到一个类(。)或id(#)匹配并删除任何行。任何未置于这些识别者之间的空行不应受到影响,包括中间还有类似评论的内容。
我设置了一个小提琴,可以用来测试下面的例子: https://jsfiddle.net/9y33cvtg/2/
BEFORE
// START
.test1 {
background: #FFFFFF;
.test2 {
background: #FFFFFF;
.test3 {
background: #FFFFFF;
}
}
}
.test5 {
background: #FFFFFF;
}
.test6 {
background: #FFFFFF;
}
// Comment
.test7 {
background: #FFFFFF;
}
AFTER:
// START
.test1 {
background: #FFFFFF;
.test2 {
background: #FFFFFF;
.test3 {
background: #FFFFFF;
}
}
}
.test5 {
background: #FFFFFF;
}
.test6 {
background: #FFFFFF;
}
// Comment
.test7 {
background: #FFFFFF;
}
到目前为止,我尝试使用以下内容,但它没有奏效:
str.replace(/\}(.*?)\./g, '')
答案 0 :(得分:1)
解析CSS文件应该使用专用库来完成。
以下解决方案仅执行以下操作:它将检测等于}
的行,后跟一个或多个空格字符,直到以点开头的行。使用它需要您自担风险。
.replace(/^}$\s+^\.\b/gm, '}\n.')
请参阅regex demo。
<强>详情
^
- 一行开始(由于m
修饰符)}
- }
$
- 行尾\s+
- 一个或多个空格^
- 开始行\.
- 一个点(注意:如果你想确保它后跟一些单词char,你可以使用\b
甚至\w
)以下是JS演示:
var str = document.querySelector('.string').innerText;
var output = document.querySelector('.output');
output.innerText = str.replace(/^}$\s+^\.\b/gm, '}\n.');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<strong>Input:</strong>
<pre class="string">
// START
.test1 {
background: #FFFFFF;
.test2 {
background: #FFFFFF;
.test3 {
background: #FFFFFF;
}
}
}
.test5 {
background: #FFFFFF;
}
.test6 {
background: #FFFFFF;
}
// Comment
.test7 {
background: #FFFFFF;
}
</pre>
<br>
<strong>Output:</strong>
<pre class="output">
</pre>
答案 1 :(得分:0)
你好,你需要像这样抓住换行符:
output.innerText = str.replace(/^}[\r\n]{2,}(?!\/\/)/gm, '}\n');
它似乎有用,告诉我它是否能解决你的问题