2017-02-21 4 views
1

私はよく書かれていないウィジェットを使用する必要があります。したがって、document.writeを使用していくつかの不正なコードを含む関数を返し、私はそれを私のページに挿入したくありません。ここで返されるものです。ajaxから返されたプレーンテキストからhrefとsrcの結果を抽出するには

if (position == 'Right') { 
    document.write('<A HREF="xxxxxx/xxxx/xxx- www.xxxx.com/xxxx/default/empty.gif/1?x" target="_top"><IMG SRC="https://cdn.oas-c17.adnxs.com/RealMedia/ads/Creatives/default/empty.gif/0" WIDTH=1 HEIGHT=1 ALT="" BORDER=0 BORDER="0"></A>'); 
} 

は、代わりに私はプレーンテキストですべてを取得するために、AJAX呼び出しを使用して、私が必要とするすべては、上記のテキストのhrefと、srcの単なる結果です。私は通常、JSONに戻ってすべてを取得するので

function getTodaysAd() { 
    $.ajax({ 
    url : "https:xxxxxxxxxx", 
    dataType : 'text', 
    cache : false, 
    success : function(data) { 
     alert(); 
     console.log(data); 
    }, 
    error: function(XMLHttpRequest, textStatus, errorThrown) { 
     alert(textStatus); 
    } 
    }); 
} 

https://xxxx-www.xxxx.com/xxx/home/1735871518/Right/default/empty.gif/1?x 

ここで

https://cdn.oas-c17.adnxs.com/RealMedia/ads/Creatives/default/empty.gif/0 

はプレーンテキストを得るために、私の呼び出しです:だから私は、テキストを解析して取得する必要があります私はこの平文を解析するのに苦労しています。それは正規表現を介して行うことができますか?

+0

HTMLは*正規の言語ではありません。 HTMLを解析するために正規表現を使用しないでください。 – Amy

+0

@Amy回答ありがとうございます。 htmlタグを何も置き換えないとどうなりますか?基本的に2つのプレーンテキストであるsrcとhrefだけが必要なので –

答えて

1

まず、あなたは、この正規表現での応答のうち、<a>タグを抽出することができます。

var markup = data.match(/document.write\s?\('([^']*)'/i); 
// searches for "document.write (' [...] '" 

あなたmarkup[1]変数は、関数によって書き込まれるように起こっていたマークアップのすべて、このようなものが含まれている必要があります。

<A  HREF="xxxxxx/ads/click_lx.ads/stage6- www.xxxx.com/xxxx/default/empty.gif/1?x" target="_top"><IMG SRC="https://cdn.oas-c17.adnxs.com/RealMedia/ads/Creatives/default/empty.gif/0"  WIDTH=1 HEIGHT=1 ALT="" BORDER=0 BORDER="0"></A> 

次に、あなたはそうのような、HTMLノードにこれを有効にするjQueryのを使用することができます。

var a = $(markup[1]); 

<a>タグがページ上の他の要素と同様に解析できるようになりました。あなたはそのようなhrefsrcを取得することができます。

var href = a.attr('href'); 
var src = a.find('img').attr('src'); 
+0

ありがとうたくさん私はそれを正しく試してみて、それがどのように動作するかを知らせます –

1

あなたの文字列は、常にあなたは次の操作を行うことができた形式を持っている場合:

var nonFormattedCode = '<A  HREF="xxxxxx/xxxx/xxx- www.xxxx.com/xxxx/default/empty.gif/1?x" target="_top"><IMG SRC="https://cdn.oas-c17.adnxs.com/RealMedia/ads/Creatives/default/empty.gif/0"  WIDTH=1 HEIGHT=1 ALT="" BORDER=0 BORDER="0"></A>'; 

var href = nonFormattedCode.replace(/\s+/g,'').match(/HREF\=\"(.*)"target/)[1]; 
var src = nonFormattedCode.replace(/\s+/g,'').match(/SRC\=\"(.*)"WIDTH/)[1]; 

それは醜いですが、それは仕事をしていません。

1

プレーンテキストで、解析しているのはその形式のものですが、確かに可能です。

/*...*/ 
success: function(data) { 
    var href = data.match(/HREF="(.*?)"/)[1]; // https://xxxx-www.xxxx.com/xxx/home/1735871518/Right/default/empty.gif/1?x 
    var src = data.match(/SRC="(.*?)"/)[1]; // https://cdn.oas-c17.adnxs.com/RealMedia/ads/Creatives/default/empty.gif/0 
} 
/*...*/ 

あなたはHREF=部分を含む完全な文字列を、必要な場合は

は、ちょうど0で [1] Sを交換してください。 String.match()は完全一致とそれに一致する各グループからなる配列を返し、 "(.*?)"は文字通り引用符の後に始まり次のものまで終わるすべてを検索します。

のでdata.match(/HREF="(.*?)"/)リターン:あなたはjQueryのを使用しているように見えるので

['HREF="http://www.url.com"', 'http://www.url.com'] 
1

、なぜすべての正規表現をわざわざ?あなたはそうのように、文字列から仮想要素を作成することができます。

var $element = $('<A HREF="xxxxxx/xxxx/xxx- www.xxxx.com/xxxx/default/empty.gif/1?x" target="_top"><IMG SRC="https://cdn.oas-c17.adnxs.com/RealMedia/ads/Creatives/default/empty.gif/0" WIDTH=1 HEIGHT=1 ALT="" BORDER=0 BORDER="0"></A>'); 

その後、あなたは通常、ページ上の要素の場合と同様に、あなたがしたい属性を何でもつかむことができます:

var href = $element.attr('href'); 
var src = $element.children('img').first().attr('src'); 

はるかに安全アプローチ、IMHO、正規表現からクリーンなマッチを得るための非常に特殊な方法でフォーマットされる文字列に依存しないからです。

+0

お返事ありがとうございます:) –

+1

お手伝いをしてうれしい! :-) – jeffdill2

関連する問題