Javascript替换标记但保留内容

时间:2014-10-12 11:38:41

标签: javascript regex tags

说我有这样的文字:

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**")

2 个答案:

答案 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, "&amp;").replace(/</g, "&lt;");
  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, "&amp;").replace(/</g, "&lt;");
  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,"");