2011-10-17 27 views
2

由於我經常在Dreamweaver中工作以進行基本的CSS工作...... DW代碼完成傾向於直接在冒號後面添加CSS屬性值,而不會間隔... {attr:value}。由於使用挑剔瀏覽器呈現問題導致了一些真正的調試頭痛,我經常發現自己不得不在冒號後面手動添加空格。 [^ DRY]有效的RegEx在CSS屬性值後強制單個空間

我目前正在建設一個簡單的正則表達式的片斷,我可以運行格式化正確的CSS ...

我現在有似乎工作,但我認爲這是一個有點粗。 ..基本上我只是想看看是否有什麼建議?下面是我得到了什麼?

(.*?(?={).*?:)([^\s][\w!#$%&'*+/=?^_`{|}~-]*.*?;}) 

而且隨着更換線...

\s$2 

►澄清下面,我有所改善上述解決方案...我仍然認爲它需要細化,但...

(?:(?={*))(?:\s*?)([\s\r\n]*?\b[\w!#$%&'*+/=?^_`|~-]*:(?!.*{))(?!\s)(.*?;) 

和更換用...

$1 $2 

►Perl的版本►

Perl使這個工作很輕...

perl -pi -e 's/^(.*?:)([^\s].*?;).*$/$1 $2/ig' 

回答

1

如果你在C#程序中運行你的正則表達式片段,我有爲您解決:

Regex regex = new Regex(@"(?<=\{{1}[\s\r\n]*)((?<Attribute>[^}:\n\r\s]+):\s+(?<Value>[^;]*);[\s\r\n]*)*(?=\})"); 

regex.Replace(input, match => 
{ 
    var replacement = string.Empty; 
    for (var i = 0; i < match.Groups["Attribute"].Captures.Count; i++) 
    { 
     replacement += string.Format(CultureInfo.InvariantCulture, "{0}: {1}\r\n", match.Groups["Attibute"].Captures[i], match.Groups["Value"].Captures[i]); 
    } 
    return replacement; 
}); 
0

如果我理解正確的話,這應該工作(JavaScript的)

'{attr:value}'.replace(/({.*?:)\s*/g,'$1 ') 

這給'{attr: value}'作爲輸出。

+0

Thanks Narenda ...但是,如果屬性不在同一行,這會失敗嗎?下面的部分將不匹配的地方有不確定的線... {。*?: 此外,我需要使用此作爲一個片段 - 作爲搜索和替換實用程序本身,所以JS不會太有效這裏...感謝您的幫助,雖然:-) –