Internet Explorer 8 Ошибка регулярного выражения JScript

Я тестирую в Internet Explorer 8 на Windows XP и сталкиваюсь с утомительной ошибкой. Я пытаюсь протестировать строки с помощью регулярного выражения, которое отлично работает в Firefox и прекрасно тестируется независимо в консоли ie8.

Но когда он через мою функцию замыкания, строка действует странно

[Редактировать] Более подробный код: не такой хороший или чистый, как предыдущий фрагмент.

var m_TableSorter = (function() {

    // static reg expression string and array for ordering dates
    var dateRegEx = new RegExp(
     "(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\\s\\d{4}");
     ...
     ...
    function greaterThan(left, right) {
        window["globalLeft"] = left;
        window["globalRight"] = right;
        var a = $.trim(left.toLowerCase());
        var b = $.trim(right.toLowerCase());
        window["globalA"] = a.toString();
        window["globalReg"] = dateRegEx;
        if (dateRegEx.test(a) && dateRegEx.test(b)) {
            var yearA = parseInt(a.substring(4,8), 10);
            var yearB = parseInt(b.substring(4,8), 10);
            if (yearA > yearB) {
                return true;
            } else if (yearB > yearA) {
                return false;
            } else {
                /* ... */
                var monthA =
                    $.inArray(a.substring(0,3).toUpperCase(), monthArray);
                var monthB = 
                    $.inArray(b.substring(0,3).toUpperCase(), monthArray);
                m_Debug.tryAssert(monthA >= 0, "Date string malformed");
                m_Debug.tryAssert(monthB >= 0, "Date string malformed");
                if (monthA > monthB) {
                    return true;
                } else {
                    return false;
                }
            }
        }
        //alert("NONDATE");
        if ( a.toUpperCase() >= b.toUpperCase() ) {
            return true;
        }
        return false;
    }

    function mergeArrays(pr_left, pr_right, pr_compareFunction, pr_rowIndex) 
    {
        m_Debug.debugUtilityFunction(arguments);
        var results = new Array();
        var obj;
        /* Merges in order so that if right > left then the results is
         * [left right] otherwise the result is [right left] (Dependant on
         * ascending or descending order)
         */
        while (pr_left.length > 0 || pr_right.length > 0) {
            if (pr_left.length > 0 && pr_right.length > 0) {
                window["globalLeft1"] = $(pr_left[0].children[pr_rowIndex]).text().toString();
                window["globalRight1"] = $(pr_right[0].children[pr_rowIndex]).text().toString();
                var bool = pr_compareFunction(
                    $.trim($(pr_left[0].children[pr_rowIndex]).text()),
                    $.trim($(pr_right[0].children[pr_rowIndex]).text())
                );
                if (bool) {
                    results.push(pr_left.shift());
                } else {
                    results.push(pr_right.shift());
                }
            } else  if (pr_left.length > 0) {
                for (obj in pr_left) {
                    results.push(pr_left[obj]);
                }
                break;
            } else if (pr_right.length > 0) {
                for (obj in pr_right) {
                    results.push(pr_right[obj]);
                }
                break;
            }
        }
        return results;

    }

ДляmergeArrays функцияpr_left & pr_right Список jQuery объектов TR. и я сравниваю текст вpr_rowIndex-th ячейка ряда на два ряда.

pr_compareFunction больше, чем.

dateRegEx.test (a) возвращает false, поскольку строка a содержит ошибки.

Тестирование в консоли ie8 говорит мне, что

globalA.toLowerCase() == "sep 2010"

возвращает ложь В этом случаеalert(globalA) показал "сентябрь 2010" иalert(globalLeft) показал "сентябрь 2010". Я проверил. Длина на обоих, чтобы быть 8, как и ожидалось.

globalLeft1 == globalLeft кажется правдой, но ни один не равен нормальным строкам.

Я вообще не понимаю, почему JScript не может распознать эти две строки. воспроизведение этих точных шагов в консоли работает как положено.

[Дальнейшее редактирование]

Различная реализация javascript обрабатывает символы без пробелов как класс символов пробела или класс символов без пробелов. Является ли это ошибкой или работает как задумано, открыто для обсуждения.

 Raynos06 окт. 2010 г., 14:37
Символы без пробелов не считаются пробелами в / s, т. Е. FF обрабатывает их как пробелы. Это приводит к сбою регулярного выражения
 Raynos06 окт. 2010 г., 14:49
Если бы каждый браузер рассматривал nbsp одинаково, его было бы не так сложно найти. Как мне округлить или закончить такие непонятные вопросы без актуальных ответов?
 Pointy06 окт. 2010 г., 14:24
Что ж, всякий раз, когда вы начинаете прибегать к суеверным изменениям во время отладки, это хороший признак того, что что-то может быть не так, как вы и не ожидали. У Internet Explorer есть свои проблемы, но сравнение строк не входит в их число. К сожалению, вы не опубликовали достаточно кода, чтобы кто-то мог вам помочь.
 Pointy06 окт. 2010 г., 13:54
Также: нет необходимости ставить «\\ d» в квадратных скобках; «[\\ d]» в точности совпадает с «\\ d». То же самое с "\\ s". И вы действительно хотите этот квантификатор "{4}"вне скобка?
 Pointy06 окт. 2010 г., 14:43
Ах !! Хорошая работа в поиске этого! Я думаю, что иногда неразрывный пробел фактически реализован как символ Unicode, отличный от символов обычного пробела.
 Pointy06 окт. 2010 г., 13:50
Вы должны показать больше своего кода. IE8 на самом деле не имеет таких ошибок, как вы описали. Кроме того, абсолютно нет необходимости вызывать «toString ()» для результата «toLowerCase». И почему вы используете все эти глобальные переменные? ЮК.
 Raynos06 окт. 2010 г., 14:14
Глобальные переменные предназначены для того, чтобы вывести мои локальные переменные в глобальную область видимости, чтобы я мог отлаживать и связываться с ними. ToString () используется, потому что я параноик и думаю, что JScript делает что-то глупое. RegExp становился все более и более грязным, потому что я не доверяю ему.

Ответы на вопрос(1)

Решение Вопроса

что «\ s» в javascript не включает неразрывный пробел в IE, но включает неразрывный пробел в FF.

Ваш ответ на вопрос