2012-01-20 63 views
4

可能重複:
Parsing CSS in JavaScript/jQuery
Parsing CSS string with RegEx in JavaScriptJavascript正則表達式來檢測字符串內的CSS代碼?

我如何找出一個字符串包含CSS規則?

規則示例:

selector { 
    property:value; 
} 


selector { property:value; } 

selector{property:value} 

... 

基本上我想找出一個文本框表示無論是PHP + HTML或CSS代碼。要做到這一點

一個辦法 - 我想修剪文本,然後匹配文本與#.的第一個字符或CSS選擇器如bodyp等你認爲這是一個好主意?

+1

[本文](http://www.catswhocode.com/blog/10-regular-expressions-for-efficient-web-development)文章有拉出CSS屬性的正則表達式。這可以修改以適合您的目的。正則表達式是:'\ s(?[a-zA-Z - ] +)\ s [:] {1} \ s *(?[a-zA-Z0-9 \ s。#] +)[;] {1}' – Chad

+0

不確定這是多麼簡潔,從來沒有使用它自己,但它看起來很有希望... http://www.catswhocode.com/blog/10-regular-expressions-for-efficient-web-development – Archer

+0

修剪文本並嘗試匹配選擇器並不是一個好主意。你需要匹配每個HTML元素的列表。 –

回答

3

tldr;考慮使用適當的CSS解析器(如JSCSSP)進行最終驗證。

這取決於目標,正則表達式可能完全無效。

如果這僅僅是「企圖」,看它是否「可以」包含CSS選擇器,那麼我可能會傾向於嘗試過於寬泛匹配,這將失敗是有什麼事情的CSS字符串值複雜(如「}」)或有CSS註釋,並且將接受寬範圍的輸入即有效的CSS的:

(?:\s*\S+\s*{[^}]*})+  // use anchored 

同樣,應檢測簡單的HTML(但是無效的表達)與標籤,只有不幸的CSS案例(匹配註釋或CSS字符串或瘋狂的子選擇器):

<(?:br|p)[^>{]*>|</\w+\s*> // use case-insensitive 

快樂編碼。

另見:Parsing CSS in JavaScript/jQuery

2

http://arxiv.org/abs/1106.4064你可能會感興趣。

算法編程語言識別

大衛·克萊恩,凱爾穆雷,西蒙·韋伯

(提交於2011年6月21日(V1),最新修訂2011年11月9日(這個版本中,V2))

受到網絡上未識別的代碼量的驅動,我們介紹了一種用於算法識別源代碼的編程語言的實用方法。我們的工作基於監督學習和智能統計功能。我們也探索了,但放棄了一種語法方法。在測試中,我們的實現遠遠優於依賴貝葉斯分類器的現有工具。代碼是用Python編寫的,可以在MIT許可下獲得。

相關問題