代码之家  ›  专栏  ›  技术社区  ›  Tigraine

只匹配内的空格

  •  0
  • Tigraine  · 技术社区  · 15 年前

    假设我得到了以下字符串来匹配:

    #sidebar h1 ul li{ #a:hover; height : 100px ;color: #fffff ; font-family: @fonts; }
    

    我想要的是只匹配大括号内的空格,而大括号两边没有用单词括起来。

    我当前的regex如下:

    ( (?!\w)|(?<!\w) )
    

    但它也匹配大括号之外的字符。我试着四处看看,但这并不像我想象的那样奏效,我只是对雷杰克斯很差劲。

    我想去掉CSS类内容中的所有空白,以便将字符串压缩为:

    #sidebar h1 ul li{#a:hover;height:100px;color:#fffff;font-family:@fonts;}
    

    顺便说一句,我正在使用.NET regex引擎,因此如果有人需要快速测试环境,我发现这个Silverlight非常方便: http://www.regexlib.com/RESilverlight.aspx

    2 回复  |  直到 15 年前
        1
  •  1
  •   Alan Moore Chris Ballance    15 年前

    试试这个:

    Regex.Replace(str, @"(?:\B\s+|\s+\B)(?=[^{}]*\})", "")
    

    但如果@media节中有规则(即嵌套大括号)或使用大括号作为元字符的语音规则,则可能会被愚弄。

        2
  •  2
  •   too much php    15 年前

    假设一些css元素有多个单词值( border: 1px solid red )您描述的空白删除过程将是灾难性的。我建议您只删除以下位置的空白:

    • “{”之后
    • 在“}之前”
    • 在';'之前和之后
    • “:”之前和之后

    幸运的是,由于CSS的语法,所有这些模式都不会出现在 {...} 部分。不幸的是,我不知道.NET regex引擎的具体内容,也许这可以工作:

    ( +(?=[};:])|(?<=[{;:]) +)