我需要這個字符串<a class=BC_ANCHOR href="http://www.msn.com" onClick=something target=_blank>MSN</a>
地帶變成<a href="http://www.msn.com">MSN</a>
- 然而這正則表達式\s+\w+[^href]=\S*\w?
在閉幕式>
不會停止,而是跑到</a>
結束 - 有人可以幫助我得到這個正則表達式停止在關閉>
?正則表達式剝離HTML標籤內容有條件
謝謝!
我需要這個字符串<a class=BC_ANCHOR href="http://www.msn.com" onClick=something target=_blank>MSN</a>
地帶變成<a href="http://www.msn.com">MSN</a>
- 然而這正則表達式\s+\w+[^href]=\S*\w?
在閉幕式>
不會停止,而是跑到</a>
結束 - 有人可以幫助我得到這個正則表達式停止在關閉>
?正則表達式剝離HTML標籤內容有條件
謝謝!
通過將\w+[^href]
你仍然允許之類的東西<a href ="...
,可以排除h
,r
,e
,或f
結束標記(即不一定href
)。
嘗試
\s+(?!href)[a-zA-Z+]+ *= *(?:"[^"]+"|\w+)
說明:(?!href)
是負先行並防止標籤被href
。
[a-zA-Z]+
是你的標籤。 '='前後有空格。我限於字母,因爲我很確定屬性名稱不能包含數字或下劃線(其中\w
將允許)。
(?:"[^"]+"|\w+)
表示標記的值可以是雙引號內的任何內容,也可以是未引用的一組\w+
。
這些都阻止匹配超出>
,除非您的正則表達式格式錯誤並且您有(例如)<a name="asdf>
(注意缺失的結束"
)。
很好的解釋。我會投兩次如果我可以:) – 2012-03-02 02:13:37
這是工作真棒 - 除了我剛剛發現的一個場景。有一個鏈接看起來像'MSN',出於某種原因'(事件)'沒有得到匹配。我試着將'\ w +'改成'。*',但是選擇了所有的東西。正則表達式,你爲什麼恨我? – 2012-03-02 02:20:04
正則表達式不恨你,你只需要學習貪婪和非貪婪。 '。*'儘可能匹配(所以會一直到最後一個'>')。爲了使這種非貪婪,即儘可能匹配*小*,請嘗試'。*?'。或者,您可以執行'[\ w()] +'來允許'\ w'和括號。 (請記住,'\ w'是'[a-zA-Z0-9_]'(粗略地說,不確定區域設置和重音字母)。 – 2012-03-02 02:41:59
如果你真的想使用正則表達式,我的建議是反過來做。將href和鏈接文本解壓縮到組,然後再次生成標記。
href="([^"]+)"[^>]*>([^<]+)<\/a>
有人提到使用DOM獲取值,我也同意如果你使用JS是最好的選擇。
由於某種原因,Regex選擇了整個字符串 - 當我需要做的是將所有'A'標籤除了'href'並且呈現該字符串。 – 2012-03-02 02:08:12
不要試圖使用正則表達式來消毒HTML。安全後果較差的方式可能會導致錯誤發生。
您的問題可能存在DOM解決方案,如果沒有,那麼有些庫已經由編寫解析器爲生的人進行了全面測試和審查。
無恥插頭:http://code.google.com/p/google-caja/wiki/JsHtmlSanitizer
你處理HTML或DOM元素?
更容易處理元素。如果你想要的元素只具有href屬性,那麼爲什麼不喜歡:
function fixLink(el) {
var newLink = document.createElement('a');
newLink.href = el.href;
newLink.appendChild(document.createTextNode(el.textContent || el.innerText));
el.parentNode.replaceChild(newLink, el);
}
即使你正在處理HTML,你可以將其插入一個新的元素(比如一個div),做以上,然後獲取剩餘的innerHTML。
我想探討一下,我解析了評論欄的鏈接,評論最初是以HTML格式顯示給用戶的,但是當用戶想要編輯評論時,我需要將其轉換去文字並去掉一些裝飾我添加特定於應用程序。考慮到這一點,有沒有更好的方式來與DOM做到這一點呢? – 2012-03-02 18:41:32
該正則表達式在許多方面看起來不正確,例如'[^ href]'意思是「匹配除了h,r,e或f之外的任何其他任何東西的_single_字符」。代碼將運行的上下文是什麼? (因爲如果你正在提取網頁上的元素,那麼有更多的方法去解決它。) – nnnnnn 2012-03-02 02:04:36
'[^ href]'表示除了'h','r','e'或'f'之外的任何字符。它並不意味着不是'href'。這可能會像'((?!href \ b)[az] +)' – 2012-03-02 02:07:59
您可能需要[更漂亮的模式](http://stackoverflow.com/questions/4231382/regular-expression-pattern-not -matching任何地方,在串/ 4234491#4234491)。 – tchrist 2012-03-02 02:12:10