Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.06.2018, 08:19
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 13.03.2018
Сообщений: 252

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 пуст. Кто нибудь сталкивался?
Ответить с цитированием
  #2 (permalink)  
Старый 20.06.2018, 08:41
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,098

А так alert(split.length)?
Ответить с цитированием
  #3 (permalink)  
Старый 20.06.2018, 09:00
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 25,858

Artur_Hopf,
а если так?
var array = [{name: 'Петров В. Б.'}];
var split = array[0].name.match(/[А-ЯЁ]+/gi);
alert(split);
Ответить с цитированием
  #4 (permalink)  
Старый 20.06.2018, 09:07
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,098

Artur_Hopf,
странная у вас регулярка даже такое пропускает 'П5$%^&q В. Б.'
Ответить с цитированием
  #5 (permalink)  
Старый 20.06.2018, 09:59
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 629

Словеса, начертаные в папирусах MDN

"Если разделитель является регулярным выражением, содержащим подгруппы, то каждый раз при сопоставлении с разделителем, результаты (включая те, что не определены) захвата подгруппы будут помещаться внутрь выходного массива. Однако, не все браузеры поддерживают эту возможность."
Ответить с цитированием
  #6 (permalink)  
Старый 20.06.2018, 10:04
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 13.03.2018
Сообщений: 252

рони,
Да с помощью .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);
};
Ответить с цитированием
  #7 (permalink)  
Старый 20.06.2018, 10:17
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 13.03.2018
Сообщений: 252

Ребят, заработало, но объясните мне почему. В интернете нашел такую обработку, после нее .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;
  };
};
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пустой массив при сохранении в localStorage kichkun Общие вопросы Javascript 3 19.11.2016 13:33
Чтение данных из файла в массив TheSingleElk Общие вопросы Javascript 2 16.06.2016 01:09
split массив DivMan Общие вопросы Javascript 1 10.03.2016 14:33
строка, split = массив фонарик Общие вопросы Javascript 7 28.03.2013 04:48
Как создать многомерный массив FRIE Общие вопросы Javascript 29 02.06.2010 18:14