假设我有这样的文本:
This should also be extracted, <strong>text</strong>
我需要text
仅从整个字符串,我尝试过:
r = r.replace(/<strong[\s\S]*?>[\s\S]*?<\/strong>/g, "$1");
但失败了( strong
仍然存在)。有什么正确的方法可以做到这一点吗?
预期结果
This should also be extracted, text
解决方案:
为了定位特定标签,我使用了这个:
r = r.replace(/<strong\b[^>]*>([^<>]*)<\/strong>/i, "**$1**")
最佳答案
要解析 HTML,您需要一个 HTML 解析器。请参阅this answer为什么。
如果您只想删除 <strong>
和</strong>
从文本来看,你不需要解析,但是当然简单的解决方案往往会失败,这就是为什么你需要一个 HTML 解析器来解析 HTML。这是一个简单的解决方案,删除 <strong>
和</strong>
:
str = str.replace(/<\/?strong>/g, "")
var yourString = "This should also be extracted, <strong>text</strong>";
yourString = yourString.replace(/<\/?strong>/g, "")
display(yourString);
function display(msg) {
// Show a message, making sure any HTML tags show
// as text
var p = document.createElement('p');
p.innerHTML = msg.replace(/&/g, "&").replace(/</g, "<");
document.body.appendChild(p);
}
返回解析:就您而言,如果您使用的是浏览器,则可以使用浏览器的解析器轻松完成此操作:
var yourString = "This should also be extracted, <strong>text</strong>";
var div = document.createElement('div');
div.innerHTML = yourString;
display(div.innerText || div.textContent);
function display(msg) {
// Show a message, making sure any HTML tags show
// as text
var p = document.createElement('p');
p.innerHTML = msg.replace(/&/g, "&").replace(/</g, "<");
document.body.appendChild(p);
}
大多数浏览器提供innerText
;火狐提供textContent
,这就是为什么会有 ||
那里。
在非浏览器环境中,您需要某种 DOM 库(有很多)。
关于Javascript替换标签但保留内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26324709/