JavaScript正则表达式替换HTML锚点

时间:2011-07-08 10:59:14

标签: php javascript regex

我有一个HTML字符串,我希望将一些特殊的标签转换为其他标签。我需要这个用于TinyMCE插件。我试图改变Wordpress wpgallery插件。

例如:这些是HTML字符串

<a href="http://www.yahoo.com">Yahoo</a> 
<a href="http://www.google.com">Google</a>
<a href="#" rel='special' title='link cat_id="4" content_id="5" content_slug="Slug 1"'>Some where else</a>

在这里,我必须找到特殊的链接一,并从它的标题值转换为其他东西 像:

{link cat_id="4" content_id="5" content_slug="Slug 1"}

我需要像这样的返回值将其插入MySQL

<a href="http://www.yahoo.com">Yahoo</a> 
<a href="http://www.google.com">Google</a>
{link cat_id="4" content_id="5" content_slug="Slug 1"}

我试过这个

function getAttr(s, n) {
            n = new RegExp(n + '="([^"]+)"', 'g').exec(s);
            return n ? tinymce.DOM.decode(n[1]) : '';
        };

return co.replace(/[^<]*(<a href="([^"]+)">([^<]+)<\/a>)/g, function(a,im) {
var cls = getAttr(im, 'rel');
   if ( cls.indexOf('special') != -1 )
       return '{'+tinymce.trim(getAttr(im, 'title'))+'}';

   return a;
});

这个

/[^<]*(<a href="([^"]+)">([^<]+)<\/a>)/g

找不到rel eq为'special'的标签,而是所有其他标签。

1 个答案:

答案 0 :(得分:2)

您可能希望查看DOMDocument和相关类。它们在解析HTML方面比自制的正则表达式解决方案要好得多。

您可以使用提供的标记创建DOM文档,执行getElementsByTagName以获取所有超链接,使用特殊值扫描其属性以获取rel属性,然后执行相应的操作。