簡體   English   中英

正則表達式以取消與javascript的html代碼鏈接

[英]regular expression to unlink html code with javascript

抱歉,我不敢相信這個問題在stackoverflow中沒有解決,但是我一直在搜索很多,但找不到任何解決方案。

我想以這種方式用正則表達式更改HTML代碼:

testing <a href="url">anchor</a>

testing anchor

只有我想在不使用DOM函數的情況下取消文本代碼的鏈接,該代碼位於文檔中未包含的字符串中,並且我不想刪除a的其他標簽。

如果您真的不想使用DOM函數(為什么?),可以這樣做

str = str.replace(/<[^>]*>/g, '')

如果您非常確定自己沒有更復雜的HTML,則可以使用它,但是在許多情況下它會失敗,例如某些嵌套標簽或屬性中的> 您可能使用更復雜的正則表達式解決了一些問題,但是在一般情況下,它們並不是此工作的正確工具。

如果你不想刪除其他標簽不是a ,這樣做:

str = str.replace(/<\/?a( [^>]*)?>/g, '')

這改變了

<a>testing</a> <a href="url"><b>a</b>nchor</a><div>test</div><aaa>E</aaa>

testing <b>a</b>nchor<div>test</div><aaa>E</aaa>

我知道您只想使用正則表達式,對於將來的觀看者來說,這是使用DOM方法的簡單解決方案。

var a = document.createElement("div");
a.innerHTML = 'testing <a href="url">anchor</a>';
var wordsOnly = a.textContent || a.innerText; 

這不會在復雜的用例上失敗,允許嵌套標簽,並且很清楚發生了什么:

  • 嘿,瀏覽器! 創建一個元素
  • 將HTML放入其中
  • 只給我文字,這就是我現在想要的。

注意:

我們正在創建的元素不會被添加到實際的DOM中,因為我們沒有在任何地方添加它,它將保持不可見。 這是用來說明這是如何工作的小提琴

如前所述,您無法使用正則表達式解析HTML。 主要原因是HTML元素嵌套,而正則表達式無法處理。

也就是說,在我將要提到的一些限制下,您可以執行以下操作:

string.replace (/(\b\w+\s*)<a\s+href="([^"]*)">(.*)<\/a>/g, '$1 $3')

這就要求在標記之前必須有一個單詞,單詞和標記之間的間距是可選的,除了<a>標記中指定的href之外,沒有其他屬性,並且您可以接受<a>和之間的任何內容。

您可以從字符串創建DOM對象,使用DOM方法進行解析,而無需將所述DOM對象附加到文檔中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM