2011-07-08 21 views
0

私はHTML文字列を取得しました。これからいくつかの特別なタグを別のものに変換したいのです。私はTinyMCEプラグインのためにこれが必要です。私はWordpressのwpgalleryプラグインを変更しようとしました。例えばHTMLアンカーを置き換えるJavaScriptの正規表現

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

私はリターンを必要とする:これらは、HTML文字列私は特別なリンク1を見つけ、そこから何か他のものに変換する必要がある。ここ

<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> 

であるが、タイトル値 ようなものですこのような値を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とタグが、他のすべてを見つけることができません。

+0

お試しください[^ <] *(([^ <]+)<\/a>) – Hgeg

+0

ありがとうございます働いた:) – orhan

+0

私はtinymceプラグインのためにこのregexpが必要です。これはonBeforeSetContentでは動作しますが、onPostProcessでは動作しません。 – orhan

答えて

2

DOMDocumentおよび関連するクラスを調べることができます。彼らは自家製の正規表現の解決策よりもHTMLを解析する方がはるかに優れています。

与えられたマークアップを使用してDOMドキュメントを作成し、getElementsByTagNameを実行してすべてのハイパーリンクを取得し、rel属性の属性をspecialの値でスキャンして適切な処置をとることができます。

関連する問題