2009-08-06 3 views
3

に動作しないパラメータRETURN_VALUE [1]次のコードは、Firefox、ChromeでTEXTAREAタグを除去するので、コンテンツはARRにアクセスすることができるJavascriptの正規表現は、IE

<textarea>{"id":43,"description":"","item_id":28,"callback":"addNewAttachment","filename":"foo.jpg",,"type":"posts","ext":"jpg","size":145}</textarea> 

を含有します。 IEアラート(「失敗」)が呼び出されます。

function addAttachment(returned_value) { 
    var re = new RegExp ("<textarea>(.+)</textarea>");  
    var arr = re.exec(returned_value); 
    if(arr != null && arr.length > 1) { 
     var json = eval('(' + arr[1] +')'); 
    } else { 
     alert("Failure");   
    } 
    window[json.callback](json); 
} 

returned_valueは、AJAX呼び出しから来ています。私はJQueryを使用します。

TEST

これはどちらか動作しません:

var re = new RegExp (/<textarea>(.+)<\/textarea>/); 

SOLUTION

問題はIEは、Firefoxはそれが小文字になっていた一方、大文字のテキストエリアの文字列を得ていたということでした。

次の正規表現は、それを解決します。

var re = new RegExp ('<textarea>(.+)</textarea)>','i'); 
+0

uはしてみてくださいでした 'するvar再=新しい正規表現(/ /。);' – palindrom

+0

* Variable \ * return_value \ *には*が含まれていますが、コードには 're.exec(returned_value);'があります。これは、質問テキストまたはコードの入力ミスですか? – Helen

+0

@palindrom:あなたはそれがすでにRegExpオブジェクトです/.../使用している場合、あなたはまた、言及された他のと大文字小文字を区別しないフラグを使用することができ、それを読みやすくするために...それから – Guffa

答えて

0

どのようなIEバージョンをお使いですか?私はIE 7に次のコードをテストし、それが働いた:

<script> 
var x = '<textarea>{"id":43,"description":"","item_id":28,"callback":"addNewAttachment","filename":"foo.jpg",,"type":"posts","ext":"jpg","size":145}</textarea>' 

var r = new RegExp('<textarea>(.+)</textarea>'); 
var a = r.exec(x); 
for (var i=1; i<a.length; i++) 
    alert(a[i]); 
</script> 

編集:私はIE7でこのコードをチェックし、それも動作します。 test.xmlは、文字列を含むファイルで、スクリプトを使用してHTMLページの横のフォルダに格納されます。同じことを返す動的なページでも動作するはずです。

<script> 
function test(x) { 
    var r = new RegExp("<textarea>(.+)</textarea>"); 
    var a = r.exec(x); 
    for (var i=1; i<a.length; i++) 
     alert(a[i]); 
} 

var rq = new XMLHttpRequest(); 
rq.open("GET", "test.xml", false); 
rq.send(null); 
test(rq.responseText) 
</script> 
+0

あなたが正しいです、コードはreturned_valueが文字列内にあるときに機能します。しかし、私はajax呼び出しでサーバーによって返された値を取得しており、問題があるようです。何か案が? –

+0

どのような種類のAjaxフレームワークを使用していますか?あなたの電話はどうですか? – rslite

+0

私は質問を更新しました。私はJQuery –

4

大文字と小文字は区別されますか? new RegExp(..., "i")は役に立ちますか?

+0

BTWを使用します。ちょうどJSONオブジェクトには2つのコマンドが含まれていることに気付きました。 ",," - 私はIEがそれをeval()でbarfしていると思います。 – searlea

4

リテラル正規表現を使用してみてください:

var r = /<textarea>(.+)<\/textarea>/i;