Javascript RegExp не работает в IE - PullRequest
3 голосов
/ 06 августа 2009

Параметр return_value содержит

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

Следующий код удаляет теги textarea в Firefox, Chrome, поэтому к контенту можно получить доступ в arr [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);
}

return_value поступает от вызова Ajax. Я использую JQuery.

ТЕСТ

Это тоже не работает:

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

РЕШЕНИЕ

Проблема заключалась в том, что IE получал строчную текстовую строку в верхнем регистре, в то время как firefox получал ее в нижнем регистре.

Следующее регулярное выражение решает его.

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

Ответы [ 3 ]

4 голосов
/ 06 августа 2009

Это вопрос с учетом регистра? new RegExp(..., "i") может помочь?

4 голосов
/ 06 августа 2009

Попробуйте использовать регулярное выражение:

var r = /<textarea>(.+)<\/textarea>/i;
0 голосов
/ 06 августа 2009

Какую версию 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...