正则表达式获取内部没有标签的html标签之间的内容?

时间:2018-04-10 06:25:41

标签: javascript html regex

我正在尝试在HTML标记之间获取内容,但不包含标记。

示例

<p>Text content <img src=""> </p>

我想仅提取Text content(不使用<img>)。

我尝试使用此正则表达式/(?<=\<p[^>]*>)(.*?)(?=\<\/p\>)/g,但这与<img>的内容相匹配。

我该如何解决这个问题?

谢谢

修改

我要做的是用unicode字符替换标签内的内容。

1 个答案:

答案 0 :(得分:0)

而不是正则表达式,使用DOM解析器并首先创建一个虚拟元素

var str = `<p>Text content <img src=""> </p>`; 
var el = document.createElement( "div" ); //create dummy element
el.innerHTML = str; //assign str as innerHTML
var output = el.querySelector( "p" ).textContent; //get the textcontent inside p

<强>演示

var str = `<p>Text content <img src=""> </p>`;
var el = document.createElement("div"); //create dummy element
el.innerHTML = str; //assign str as innerHTML
var output = el.querySelector("p").textContent; //get the textcontent inside p
console.log(output);

要用其他字符串替换此内容,请更改文本节点的节点值

Array.from(el.querySelector("p").childNodes)
  .forEach(s => 
    s.nodeType == 3 && s.nodeValue.trim().length > 0 ? s.nodeValue = strToReplaceWith : "");

<强>演示

var str = `<p>Text content <img src=""> </p>`;
var strToReplaceWith = "abc";
var el = document.createElement("div"); //create dummy element
el.innerHTML = str; //assign str as innerHTML
Array.from(el.querySelector("p").childNodes)
  .forEach(s => 
    s.nodeType == 3 && s.nodeValue.trim().length > 0 ? s.nodeValue = strToReplaceWith : "");
console.log(el.innerHTML);