我在javascript中使用REGEX推广字符串时遇到了困难。 我有一个包含几个锚标签的字符串,其中包含的文本可以是:
<b> text <a href="javascript:opendynamicurlwindow('http://www.google.com', '', '', '', '','no')">www.google.com< /a ><abc><a href="javascript:opendynamicurlwindow( 'http://www.flipkart.com', '', '', '', '','no')" >www.flipkart.com</a></b>
我需要将此文本转换为除锚标记之外的html兼容值,即
1. <b> text should be encoded as <b> text
2. <abc> should be encoded as <abc> text
3. </a> should be encoded as </a> text
我在分离文本和锚标签方面遇到了麻烦,以便我可以正确处理它们。 我尝试过正则表达式:(] &gt; +。&lt; +。* / a&gt;)但匹配不适用于多个网址。
答案 0 :(得分:0)
js-side htmlencode
的一个棘手方法是:
var html = '<h1>Your <a href="http://google.com">html</a></h1>';
$('<div />').text(html).html()
其他方式是直接替换:
html
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
如果要更正解析html文本,则应使用DOM解析器 但在您的情况下,可能会在下面使用简单的代码:
var anchorreg = /<a\s+[^>]+>(.*?)<\/a>/g;
var links = s.match(anchorreg);
var res = s.replace(anchorreg, '#anchor#');
res = htmlencode(res); // where htmlencode is one of methods above
for(var i=0;i<links.length;i++) res = res.replace('#anchor#', links[i])
console.log(res);