正则表达式匹配CSS结构?

时间:2015-11-03 18:02:36

标签: regex

我正在寻找能够帮助我清理大文件的正则表达式。我想改变这个:

selector {
  property: value;
}

进入这个:

selector { property: value; }

包括类似的版本:

selector,
selector2 {
  property: value;
}

成:

selector,
selector2 { property: value; }

但不改变:

selector {
  property: value;
  property2: value2;
}

基本上,我想找到property: value;只有一个实例的地方,并改变它,但不管其他一切。

注意:可能存在用于缩进的选项卡,2个空格,4个空格等差异的实例。如果可能,我想抓住所有这些。

3 个答案:

答案 0 :(得分:3)

正如评论中所述,正则表达式不一定是最好的方法。也就是说,这是一个经过不完全测试的正则表达式,可以帮到你。

替换:

\{\s+(\S+:)\s*([^;]+;)\s+\}

使用:

\{ $1 $2 \}

例如,这适用于Notepad ++或Sublime Text。如果您使用的是脚本语言(Perl,PHP,JavaScript等等),则可能需要将g标志显式添加到正则表达式以替换所有匹配项,如/\{\s+(\S+:)\s*([^;]+;)\s+\}/g

Here's a working demo

答案 1 :(得分:1)

以下正则表达式可用于查找您要查找的内容:

\{\n.+?\n\}

我会在Sublime Text 2中使用此正则表达式,以便按照以下步骤清理文件:

  1. 在Sublime Text 2
  2. 中打开您的文件
  3. 按Ctrl + F
  4. 点击搜索栏最左侧的按钮,打开正则表达式搜索。
  5. 输入我给你的正则表达式。
  6. 按Alt + Enter选择文档中与此模式匹配的所有区域。
  7. 您现在可以使用多个光标功能进行编辑。执行所需操作的按键示例可以是左箭头,结束,删除,结束,右箭头,退格。

答案 2 :(得分:1)

我想你可以这样做。
基本上,它只是获得和排除换行;

查找:\{\s*\r?\n\s*([^:\r\n]*:[^;\r\n]*;)\s*\r?\n\s*\}
替换:{ $1 }

格式化:

 \{ \s* \r? \n \s*                # { then newline
 ( [^:\r\n]* : [^;\r\n]* ; )      # (1), property: value;
 \s* \r? \n \s* \}                # newline then }