[英]Javascript RegEx matching a string inside HTML tags
我這里的情況很奇怪。 我有一個看起來像這樣的字符串:
<tag class="bla">hey there </tag>
我必須使用javascript替換所有
包含在HTML標記內,並帶有空格。 可以有任意數量的標簽和
。 因此它必須看起來像這樣:
<tag class="bla">hey there </tag>
在此先感謝亞瑟。
可能不是最有效的,但應該執行以下工作:
str.replace(/<([^>]+)>/g, function(m){ return m.replace(/ /gi, ' '); });
哪個應該只能觸摸
在<>
內部
首先,讓我們再次聲明,使用正則表達式解析(X)HTML是正確的答案時,這可能是因為問題被嚴重搞砸了。 在這種情況下,您應該讓生成損壞的HTML的人讓他放鼻子,然后讓他修復混亂。
否則,它將成為您的工作,並且對任何進一步的混亂承擔責任。
就是說,也許最安全的方法是尋找
<([^<>]*) ([^<>]*)>
並將其替換為<\\1 \\2>
。 這種方法的缺點是您必須重復執行此操作(如果您的標簽內部有八個
;,則必須將替換操作重復八次)。
因此,您還需要一個執行替換的循環,如果替換后的文本與之前的文本相同,則說明您已完成並可能退出循環。
就替換速度而言,這不是最有效的方法,但是它更直接,更容易處理。 它還有助於記住這是一個麻煩的解決方法:-)
在這種特殊情況下,可以通過修改外部表達式來解決RoToRa注釋中描述的問題:
<(\w[^<>]*) ([^<>]*)>
因此它只接受以字母開頭的標簽。 1 < 2 > 3
1 < 2 > 3
則被拒絕。
相同的“解決方案”適用於Ross McLellan的解決方案:
str.replace(/<(\w[^>]+)>/g, function(m){ return m.replace(/ /gi, ' '); });
出於性能方面的考慮,Ross的解決方案在較小的HTML塊上速度更快,並且在標記數量增加時落后於我的解決方案。 那是因為我的解決方案的搜索開銷略大,但是我的發現要少得多的匹配,並且實際上進行了更少的replace()
調用。
此修改可能會兼得兩全,但我尚未對其進行測試:
str.replace(/<(\w[^<>]* [^<>]*)>/g,
function(m) {
return m.replace(/ /gi, ' ');
}
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.