Javascript将文本与锚标记分开

时间:2014-11-18 07:52:42

标签: javascript regex tags anchor

我在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 &lt;b&gt; text
 2. <abc> should be encoded as &lt;abc&gt; text 
 3. </a> should be encoded as &lt;/a&gt; text 

我在分离文本和锚标签方面遇到了麻烦,以便我可以正确处理它们。 我尝试过正则表达式:(] &gt; +。&lt; +。* / a&gt;)但匹配不适用于多个网址。

1 个答案:

答案 0 :(得分:0)

js-side htmlencode的一个棘手方法是:

var html = '<h1>Your <a href="http://google.com">html</a></h1>';
$('<div />').text(html).html()

其他方式是直接替换:

html
  .replace(/&/g, "&amp;")
  .replace(/</g, "&lt;")
  .replace(/>/g, "&gt;")
  .replace(/"/g, "&quot;")
  .replace(/'/g, "&#039;");

如果要更正解析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);