2

我正在 Netbeans 中编辑旧的 SCSS,并希望将其格式化为更漂亮。

我想对所有后面没有空格的冒号进行正则表达式“查找和替换”。我想确保每个冒号后面都有一个空格。

这是一些示例 SCSS:

display: block;
width:800px;
height:20px;
text-align:center;

正则表达式将忽略第一行,然后在接下来的 3 行中将在每个冒号后添加一个空格。

我知道有特殊的极端情况,例如input.focus::-webkit-input-placeholder. 我可以逐个进行查找和替换,而不是“全部替换”。然后我可以跳过角落案例。

如果有一种非正则表达式的方法可以做到这一点,那也可以。

4

3 回答 3

2

试试这个搜索

([a-zA-Z0-9]:)([a-zA-Z0-9#])

并将其替换为

$1 $2
于 2012-09-06T17:33:49.927 回答
1

@Ian G 的答案更接近一些,但仍然不完整。以下规则不会被它捕获:

background:url("img/test.jpg");
font-size:.8em;
height:auto !important;
line-height:1.2em;
width:calc(100% - 5px);

我对其进行了进一步修改以捕捉这些规则:

([\t\s,;\{])([a-zA-Z\-]+):([\'a-zA-Z\d,\-\:\+\/%#\!\.\"\(\)]+((\s*,\s*|\s+)[\'a-zA-Z\d,\-%#\!\.\"\(\)]+)*([\r\n][\t\s]*)*[;|\}])

我能想到的唯一仍然无法使用的场景是内联数据 URI:

background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNlOGU4ZTgiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);

;MIME 类型中的 将其排除在外。但是,修改将捕获稍微错误的 CSS 格式。

于 2016-09-15T16:54:19.233 回答
1

我最近使用的一个正则表达式搜索有效:

([\t\s,;\{])([a-zA-Z\-]+):([\'a-zA-Z\d,\-%#]+((\s*,\s*|\s+)[\'a-zA-Z\d,\-%#]+)*([\r\n][\t\s]*)*[;|\}])

替代品

$1$2: $3

我在 notepad++ (v6.7.5) 和 sublime (build 3083) 中对其进行了测试。此正则表达式涵盖多种场景,例如:

.some-class {
    font-family:'Arial Regular', 'Arial', sans-serif;
    width:25%;
    height:10px;
    color:#fff;
    border:1px solid #d7d7d7
}

它也会忽略伪选择器。

于 2015-12-09T00:34:23.643 回答