2009-08-06 67 views
3

參數工作RETURN_VALUE包含的Javascript正則表達式中不IE

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

下一個代碼移除textarea的在Firefox,鉻標籤,所以含量可以在改編被訪問[1]。在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是越來越它小寫大寫textarea的字符串。

下一個正則表達式解決了這個問題。

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

沒有ü嘗試 '變種重新=新的正則表達式(/ /);' – palindrom 2009-08-06 08:30:46

+0

你說* Variable * * return_value * *包含*,但在代碼中有're.exec(returned_value);'。這是問題文本或代碼中的拼寫錯誤嗎? – Helen 2009-08-06 08:33:26

+0

@palindrom:如果你使用/.../它已經是RegExp對象,你不應該從它創建一個新的RegExp對象... – Guffa 2009-08-06 08:36:03

回答

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調用返回的值,似乎有問題。任何想法? – 2009-08-06 08:39:14

+0

你使用什麼樣的Ajax框架?你的電話如何? – rslite 2009-08-06 08:41:44

+0

我更新了問題。我使用JQuery – 2009-08-06 09:35:18

4

這是一個區分大小寫的問題嗎? new RegExp(..., "i")可能有幫助嗎?

+0

順便說一句。剛剛注意到JSON對象包含兩個commans:「,,」 - 我認爲IE會在eval()中的barf上,一旦你達到那麼遠。 – searlea 2009-08-06 09:45:01

4

嘗試使用字面正則表達式:

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