使用正则表达式从HTML中提取文本和链接
发布时间:2020-12-14 06:30:47 所属栏目:百科 来源:网络整理
导读:我想从一个html文档中提取文本,保持其中的链接.例如: 从这个HTML代码 div class="CssClass21"bla1 bla1 bla1 a href="http://www.ibrii.com"go to ibrii/a bla2 bla2 bla2 img src="http://www.contoso.com/hello.jpg" span class="cssClass34"hello hello/
我想从一个html文档中提取文本,保持其中的链接.例如:
从这个HTML代码 <div class="CssClass21">bla1 bla1 bla1 <a href="http://www.ibrii.com">go to ibrii</a> bla2 bla2 bla2 <img src="http://www.contoso.com/hello.jpg"> <span class="cssClass34">hello hello</span> 我想提取这个 bla1 bla1 bla1 <a href="http://www.ibrii.com">go to ibrii</a> bla2 bla2 bla2 hello hello 在StackOverflow的另一篇文章中,我找到了RegEx< [^>] *>它允许通过替换每个匹配来提取文本.如何从匹配中排除锚标记?似乎RegEx不允许反向匹配.
暂时编码< a href ...> …< / a>进入别的东西,删除所有其他标签然后恢复< a>标签:
// Example in javascript: string. replace(/<a(.*?)>/g,' $1 '). replace(/</a>/,'1'). replace(/<[^>]*>/,''). replace(/ (.*?) /,'<a$1>'). replace(/1/,'</a>'); 在上面的代码中,我使用NUL和SOH字符(ASCII 0x00和0x01)作为< a>的替换.标签只是因为它们不太可能出现在字符串中.您可以随意将其替换为字符串中不会出现的任何其他字符或字符序列. 从其他评论看来,您正在浏览器中运行.在这种情况下,浏览器已经将HTML解析为一个漂亮的DOM树.使用DOM方法解析树并按照您希望的方式处理它: function simpleHTML (domNode) { var ret = ""; if (domNode.nodeType === Node.ELEMENT_NODE) { var children = domNode.childNodes; for (var i=0;i<children.length;i++) { var child = children[i]; // Filter out unwanted nodes to speed up processing. // For example,you can ignore 'SCRIPT' nodes etc. if (child.nodeName != 'SCRIPT') { if (child.nodeName == 'A') { ret += '<a href="' + child.href + '">' + simpleHTML(child) + '</a>'; } else { ret += simpleHTML(child); } } } } else if (domNode.nodeType === Node.TEXT_NODE) { ret += domNode.nodeValue; } return ret; } // serialize the whole document: var simpleDocument = simpleHTML(document.body); // serialize a div: var simpleDiv = simpleHTML(document.getElementById('some_div')); // filter a html formatted string: var temp = document.createElement('DIV'); temp.innerHTML = original_string; simple_string = simpleHTML(temp); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |