Зачем совпадать, находить результат, в то время как test возвращает false для регулярного выражения в JavaScript? - PullRequest
0 голосов
/ 19 мая 2009

Я пытался отладить проблему сортировки с помощью плагина jquery tablesorter , который использует следующий код для проверки на наличие цифр:

this.isDigit = function(s,config) {
                var DECIMAL = '\\' + config.decimal;
                var exp = '/(^[+]?0(' + DECIMAL +'0+)?$)|(^([-+]?[1-9][0-9]*)$)|(^([-+]?((0?|[1-9][0-9]*)' + DECIMAL +'(0*[1-9][0-9]*)))$)|(^[-+]?[1-9]+[0-9]*' + DECIMAL +'0+$)/';
                return RegExp(exp).test($.trim(s));
            };

значение для config.decimal равно '.'

Теперь, если s = '0', это не удастся, но если вы запустите матч вместо этого, RegEx будет реагировать положительно, как и ожидалось.

return exp.match($.trim(s)) != null

Чем отличается эта обработка для получения разных результатов?

На всякий случай, если вы хотите, чтобы HTML был получен из s (последний столбец рассматривается как текст):

<tr class="">
  <td><a href="#">Click</a></td>
  <td>Annen Woods</td>
  <td>131</td>
  <td>20</td>        
  <td>5</td>
  <td>3</td>
  <td>12</td>
  <td>6</td>
  <td>50%</td>
  <td>0</td>    
</tr>

Я понимаю, что test возвращает логическое значение, а match возвращает строку или ноль.

Главный вопрос - почему не для этого регулярного выражения:

return RegExp(exp).test($.trim(s));

эквивалентно:

return exp.match($.trim(s)) != null

Ответы [ 3 ]

1 голос
/ 19 мая 2009

Я думаю, что это немного странное совпадение из-за функции, используемой для построения регулярного выражения.

Match является членом String.

Test является членом RegExp.

Однако в этой функции exp определяется как строка. Итак, технически вы запускаете метод match () String, используя exp как строковое значение, а не как регулярное выражение.

Запуск exp через конструктор RegExp должен вернуть тот же результат, что и test ().

1 голос
/ 19 мая 2009

match возвращает массив значений, тест возвращает логическое значение, при некоторых тестах двигателя возвращается первый результат

0 голосов
/ 20 мая 2009

Оказывается, это обращение соответствующих объектов.

return exp.match($.trim(s)) != null

должно быть

return $.trim(s).match(exp) != null

Исходный код просто проверял наличие "0" в строке RegEx

По-прежнему, похоже, ошибка в TableSorter. Вы должны объявить парсер как «цифра», если в вашей таблице присутствуют 0 значений. Проблема JQuery TableSorter

...