我正在尝试在HTML标记之间获取内容,但不包含标记。
示例
<p>Text content <img src=""> </p>
我想仅提取Text content
(不使用<img>
)。
我尝试使用此正则表达式/(?<=\<p[^>]*>)(.*?)(?=\<\/p\>)/g
,但这与<img>
的内容相匹配。
我该如何解决这个问题?
谢谢
修改
我要做的是用unicode字符替换标签内的内容。
答案 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);