说我有这样的文字:
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**")
答案 0 :(得分:3)
要解析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
; Firefox提供textContent
,这就是||
那里的原因。
在非浏览器环境中,您需要某种DOM库(其中有很多)。
答案 1 :(得分:2)
你可以这样做
var r = "This should also be extracted, <strong>text</strong>";
r = r.replace(/<(.+?)>([^<]+)<\/\1>/,"$2");
console.log(r);
我刚刚加入了一些严格的正则表达式。但如果你想放松版,你可以做得很好
r = r.replace(/<.+?>/g,"");