regex match () работает в FF / Chrome, но не в IE 8 - PullRequest
3 голосов
/ 29 октября 2011

У меня следующий вызов jQuery, который возвращает совпадение в FF / Chrome, но возвращает ноль в IE 8.

Вот скрипка , если вы хотите попробовать ее длясебя.

И вот неразрешимый, ненадежный, капризный код:

var m = $('#somediv').text().match(/\d+-(\d+)\sof\s(\d+)/);

РЕДАКТИРОВАТЬ: Благодаря Робу В. Я немного сузил это;следующее работает, так что именно "of" или "\ sof \ s" не работает.Вилка скрипка и попробуйте несколько для себя: (

var m = $('#somediv').text().match(/\d+\D(\d+)\D+(\d+)/);

Ответы [ 3 ]

3 голосов
/ 29 октября 2011

Опираясь на ответ Роба В., который обнаруживает проблему, которую replace не заменяет глобально по умолчанию, другая вещь, которая здесь не указана, это фактический текст, который вы ищете. Роб У также указывает, что, поскольку вы получаете текст с помощью text() в jQuery, сущности   были декодированы в фактические, фактические неразрывные пробелы.

  - это объект HTML, указывающий его в качестве аргумента для replace, который фактически не будет интерпретировать его как неразрывный пробел, он просто будет искать фактический текст   в теме строка.

Указание кодовой точки Unicode для неразрывного пробела (00A0) в регулярном выражении поиска работало для меня в режиме совместимости IE 8 и IE 7:

var m = t.replace(/\u00a0/g, ' ').match(/\d+-(\d+)\sof\s(\d+)/);

В IE 9 все работает правильно, потому что он, как и другие браузеры, содержит неразрывные пробелы в \s. Более старые версии IE не , и это единственная причина, по которой замена была бы необходима.

2 голосов
/ 29 октября 2011

Используйте это RegExp:

/\d+-(\d+)\xa0of+\xa0(\d+)/

http://jsfiddle.net/gilly3/KNbpN/

К сожалению, кажется, IE8 не распознает неразрывные пробелы как совпадения с пробелами (\s).

2 голосов
/ 29 октября 2011

Ваш код заменит только первый случай  .Однако, поскольку вы получаете текст с помощью .text(), функция replace не требуется.

var m = t.replace(/ /g, ' ').match(/\d+-(\d+)\sof\s(\d+)/);

Если ваша проблема не решена с помощью предыдущей строки, используйте alert(t) для проверкиявляется ли ввод ожидаемым.

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