2011-07-08 54 views
1

我有這樣的HTML標籤這個正則表達式把報價HTML屬性

的情景,如果屬性不是通過單次或雙引號..我希望把雙引號爲

如何編寫正則表達式?

+2

爲什麼你需要添加引號?對於HTML 4.01,它們不是必需的。 – Oded

+0

請給我們展示一些html和JS代碼(它是怎麼回事,以及它應該如何),所以我們可以理解你在說什麼。 –

+3

您是否考慮過使用HTML解析器而不是正則表達式? –

回答

3

如果您重複使用正則表達式的次數可能與元素中的標記次數相同,那麼只要文本相當正常並且不包含大量可能會導致誤報的特殊字符,就應該可以工作。

"<a href=www.google.com title = link >".replace(/(<[^>]+?=)([^"'\s][^\s>]+)/g,"$1'$2'") 

正則表達式表示:其次是等於(=)所有拍攝的第一組((...)),並隨後第二組開放標籤(<),隨後由一個或多個未關閉標籤([^>]+)ungreedily(?) ((...))一次或多次(+)捕獲單個或雙引號或空格([^"'\s])後跟非空格或關閉標記([^\s>]),然後將其替換爲第一個捕獲的組($1),然後用單引號將第二個捕獲的組替換('$2'

例如與循環:

html = "<a href=www.google.com another=something title = link >"; 
newhtml = null; 
while(html != newhtml){ 
    if(newhtml) 
     html = newhtml; 
    var newhtml = html.replace(/(<[^>]+?=)([^"'\s][^\s>]+)/,"$1'$2'"); 
} 
alert(html); 

但是,這是一個糟糕的方式去了解你的問題。最好使用HTML解析器解析,然後根據需要重新格式化HTML。這將確保格式良好的HTML格式正則表達式只能確保格式良好的HTML,如果輸入完全按照預期。

1

非常有幫助!我做了一些細微的修改,使其與單個字符值的屬性匹配: /(<[^>]+?=)([^"'\s>][^\s>]*)/g(將一個或多個+更改爲零個或多個*,並將>添加到第二組中的第一個匹配中)。