gpt4 book ai didi

javascript - 在 JavaScript 正则表达式中查找标记之外的字符?

转载 作者:行者123 更新时间:2023-12-01 17:42:31 25 4
gpt4 key购买 nike

我正在寻找 &通过符合特定规则的正则表达式的字符,以避免为 Markdown 解析格式化。这些字符应该只在它们在 <> 之外的地方匹配。标签(例如 *<a href="...">*</a>* ),以及不紧跟前导方括号的括号外,例如 *[*]()* .)

适用于第一种情况的正则表达式的当前版本是:

/(\&)(?![^<]*>|[<>]*<\/)/gi

并且可以查看here .在这种情况下,第三行的第三个匹配项不应匹配。

另外,为了不完全依赖外部站点,下面是上面链接中的测试用例:

& <a href="http://www.google.com?a=b&c=d"> & </a> &
& <a href="http://www.google.com?a=b&c=d"> & </a> &
& ![test & amp](http://www.google.com?a=b&c=d) &
& all the amps on this line should match [ & ] (&) [ &] ( & ) [& ] (& )[&] ( &) &
& <a href="http://www.google.com?a=b&c=d"> & </a> &
& <a href="http://www.google.com?a=b&c=d"> & </a> && <a href="http://www.google.com?a=b&c=d"> & </a> && <a href="http://www.google.com?a=b&c=d"> & </a> &
& <a href="http://www.google.com?a=b&c=d"> & </a> &

最佳答案

function processTextNodes(htmlString, callback) {
var div = document.createElement('div');
div.innerHTML = htmlString;

var elements = [div];
var element, child, i;

while (elements.length) {
element = elements.shift();
for (i = 0; i < element.childNodes.length; i++) {
child = element.childNodes[i];
if (child.nodeType === element.ELEMENT_NODE) {
elements.push(child);
} else if (child.nodeType === element.TEXT_NODE) {
child.textContent = callback(child);
}
}
}

return div.innerHTML;
}

用法

var html = 'hello <h1>This is a heading & a <span>nested value</span></h1> bye!';

processTextNodes(html, function (textNode) {
return textNode.textContent.toUpperCase();
});

给你

"HELLO <h1>THIS IS A HEADING &amp; A <span>NESTED VALUE</span></h1> BYE!"

请注意浏览器的 HTML 解析器如何完成转义。不要尝试重新实现它,尤其是不要使用正则表达式。世界上最强大的 HTML 解析器,甚至可以处理任何类型的损坏输入,就在您的指尖。使用它。

如果不需要“处理文本节点值”部分,将其删除,函数变得很短:

function fixHTML(htmlString) {
var div = document.createElement('div');
div.innerHTML = htmlString;
return div.innerHTML;
}

关于javascript - 在 JavaScript 正则表达式中查找标记之外的字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39297143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com