我使用.getBody()从GmailApp中提取了一些html,并希望返回一些html,用于过滤特定标记和内容与数组中任何值匹配的内容(特别是与某些文本的链接)。看this solution我认为最简单的方法是使用Xml.parse()
并过滤对象,但不能超越创建XmlDocument。
例如,如果:
var html = '<div>some text then <div><a href="http://example1.com">foo</a></div> and then <span>some <a href="http://example2.com">baa</a>,and finally <a href="http://example3.com">close</a></span></div>';
和
var linksToRemove = ['baa','foo'];
我怎么能回来
var newHtml = '<div>some text then <div></div> and then <span>some ,and finally <a href="http://example3.com">close</a></span></div>';
使用
var obj = Xml.parse(html, true);
我可以得到一个要处理的对象,但它完全脱离了那里(我也考虑过只使用.replace()
但是考虑到与RegEx匹配的问题,最好避免使用)
答案 0 :(得分:1)
以下建议选择尝试使用正则表达式
var html = '<div>some text then <div><a href="http://example1.com">foo</a></div> and then <span>some <a href="http://example2.com">baa</a>,and finally <a href="http://example3.com">close</a></span></div>';
var linksToRemove = ['baa', 'foo'];
var newHtml = cleanBody(html, linksToRemove);
/**
* Removes links from html text
* @param {string} html The html to be cleaned.
* @param {array} exclude The array of link text to remove.
* @returns {string} Cleaned html.
*/
function cleanBody(html, exclude) {
html = html.replace(/\r?\n|\r|\t/g, ''); // used to remove breaks and tabs
var re = '<a\\b[^>]*>(' + exclude.join('|') + ')<\\/a>';
return html.replace(new RegExp(re, 'ig'), "");
}
进行测试