split и IE8, показывает пустой массив
Добрый день, столкнулся с проблемой что не могу обработать объект с помощью регулярного выражения в internet explorer 8. В более старших версиях и других браузерах все работает.
Вот код: var array = [{name: 'Петров В. Б.'}]; var split = array[0].name.split(/^\s*([А-ЯЁ]\S+)\s+([А-ЯЁ])\s*\.\s*([А-ЯЁ])\s*\.\s*([\s\S]*?)\s*$/); alert(split); В IE 8 выдает просто что массив split пуст. Кто нибудь сталкивался?:-? |
Artur_Hopf,
а если так? var array = [{name: 'Петров В. Б.'}]; var split = array[0].name.match(/[А-ЯЁ]+/gi); alert(split); |
Словеса, начертаные в папирусах MDN
"Если разделитель является регулярным выражением, содержащим подгруппы, то каждый раз при сопоставлении с разделителем, результаты (включая те, что не определены) захвата подгруппы будут помещаться внутрь выходного массива. Однако, не все браузеры поддерживают эту возможность." |
рони,
Да с помощью .match заработало но он изменяет получившийся объект от того каким он был при .split Пример: // было var array = [{name: 'Петров В. Б.'}, {name: 'Не человек'}]; for (var i = 0; i < array.length; i++) { var split = array[i].name.split(/^\s*([А-ЯЁ]\S+)\s+([А-ЯЁ])\s*\.\s*([А-ЯЁ])\s*\.\s*([\s\S]*?)\s*$/); alert(split); }; Тоесть в данном примере если фамилия, то split[0] = '', split[1] = Петров и тп. А если не фамилия split[0] = 'Не человек'. в этом и был смысл. Если использовать .math split[0] всегда занят и не работает если не "человек": var array = [{name: 'Петров В. Б.'}, {name: 'Не человек'}]; for (var i = 0; i < array.length; i++) { var split = array[i].name.match(/^\s*([А-ЯЁ]\S+)\s+([А-ЯЁ])\s*\.\s*([А-ЯЁ])\s*\.\s*([\s\S]*?)\s*$/); alert(split); }; |
Ребят, заработало, но объясните мне почему. В интернете нашел такую обработку, после нее .split заработала корректно. Но я искал замену .filter. Пока не вижу взаимосвязи.
if (!Array.prototype.filter) { Array.prototype.filter = function(fun /*, thisp */) { "use strict"; if (this === void 0 || this === null) throw new TypeError(); var t = Object(this); var len = t.length >>> 0; if (typeof fun !== "function") throw new TypeError(); var res = []; var thisp = arguments[1]; for (var i = 0; i < len; i++) { if (i in t) { var val = t[i]; // in case fun mutates this if (fun.call(thisp, val, i, t)) res.push(val); } } return res; }; }; |
Часовой пояс GMT +3, время: 20:20. |