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, время: 19:50. |