Регулярное выражение Javascript не работает в IE - PullRequest
1 голос
/ 21 июня 2010

Итак, у меня генерируется эта таблица, и каждой ячейке присваивается уникальный идентификатор: r # c #, где # - строка / столбец. У меня есть код ниже, который извлекает номер строки и номер столбца из идентификатора ячейки при наведении мыши, и он прекрасно работает в Firefox и Chrome, но не работает в Internet Explorer.

var cell_id = $(this).attr("id");
var matches = /[a-z]+(\d+)[a-z]+(\d+)/(cell_id);
var row = matches[1];
var col = matches[2];

Почему это не работает в проводнике?

1 Ответ

3 голосов
/ 21 июня 2010

В Internet Explorer регулярное выражение не может использоваться как функция.Эквивалентом является метод exec(), который реализован в разных браузерах.

var matches = /[a-z]+(\d+)[a-z]+(\d+)/.exec(cell_id);

Чувствовалось, что этот ответ был немного неполным, не упоминая, что Internet Explorer - не единственный браузер, который не позволяет выполнять регулярные выражения как функции.Фактически, это расширение Mozilla, и оно даже не определено в 3-м или 5-м изданиях ECMAScript.Вы можете легко проверить, поддерживается ли это, используя оператор typeof:

if (typeof / / == "function")
    // Regex can be used like a function
else if (typeof / / == "object")
    // Regex cannot be used like a function

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...