javascript - Internet Explorer 8 JScript 正则表达式错误

标签 javascript string internet-explorer

我正在 Windows XP 上的 Internet Explorer 8 中进行测试,并遇到了一个繁琐的错误。我正在尝试使用正则表达式测试字符串,该正则表达式在 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_leftpr_right是TR对象的jQuery列表。我比较该行的第 pr_rowIndex-th 单元格中的文本两行。

pr_compareFunction 大于。

dateRegEx.test(a) 返回 false,因为字符串 a 被窃听。

在 ie8 控制台中测试它告诉我

globalA.toLowerCase() == "sep 2010"

返回错误。在本例中,alert(globalA) 显示“sep 2010”,alert(globalLeft) 显示“Sep 2010”。我已检查两者的 .length 均为 8,符合预期。

globalLeft1 == globalLeft 似乎是正确的,但都不等于普通字符串。

我完全不明白为什么 JScript 无法识别这两个字符串。在控制台中复制这些确切的步骤可以按预期进行。

[进一步编辑]

JavaScript 的不同实现将不间断空格字符视为空格字符类或非空格字符类。这是一个错误还是按预期工作还有待讨论。

最佳答案

如前所述。这里的问题是,javascript 中的“\s”在 IE 中不包含不间断空格,但在 FF 中包含不间断空格。

关于javascript - Internet Explorer 8 JScript 正则表达式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3872046/

相关文章:

javascript - ExtJS 不识别 IE11

javascript - 文档和窗口高度返回相同的值?

css - IE中 "letter/word-spacing: initial"相当于什么

html - 按钮类型提交在 IE 浏览器中不起作用

css - Internet Explorer CSS 缩放忽略最大宽度和最大高度

javascript - 将 Node+Express 与 AngularJS 一起使用

javascript - 过滤后的交叉过滤器维度与按过滤属性定义维度

c - 打印出使用字符串在文本文件中搜索单词时出错

c++ - std::cin 输入带空格?

python - 最长的元音子串 - Python