Почему делает JavaScript RegExp/^\\w+ $ / неопределенное соответствие?

Попробуйте это

Arrays.toString(array)
20
задан cdmckay 6 July 2009 в 02:35
поделиться

3 ответа

Когда undefined приводится к строке (что и делает регулярное выражение), создается строка «undefined» , которая затем сопоставляется.

44
ответ дан 29 November 2019 в 23:11
поделиться

See ECMAScript Specification section 15.10.6.2 for RegExp.prototype.exec(string) which will be called from .match method. match basically is exec when it's evaluated to true.

Here is word for word from the specification: Выполняет сопоставление строки регулярного выражения с регулярным выражением и возвращает объект Array, содержащий результаты сопоставления, или null, если строка не соответствует В строке ToString (строка) ищется вхождение шаблона регулярного выражения следующим образом:

  1. Пусть S будет значением ToString (строка).
  2. Пусть length будет длиной S.
  3. Пусть lastIndex будет значение свойства lastIndex.
  4. Пусть i будет значением ToInteger (lastIndex).
  5. Если глобальное свойство имеет значение false, пусть i = 0.
  6. Если I <0 или I> length, установите lastIndex значение 0 и возврат null.
  7. Вызовите [[Match]], передав ему аргументы S и i. Если [[Match]] вернул ошибку, перейдите к шагу 8; в противном случае пусть r будет его результатом состояния и перейти к шагу 10.
  8. Пусть i = i + 1.
  9. Перейти к шагу 6. ​​
  10. Пусть e будет значением endIndex для r.

Как видите, это будет преобразовать любой ввод в строку, так что undefined становится undefined, и это будет соответствовать true.

Проверил это также вне браузера с помощью JScript в командной строке и получил тот же результат.

4
ответ дан 29 November 2019 в 23:11
поделиться
/(\w)(\w)(\w)(\w)(\w)/.exec(undefined);  

возвращает: ["undef", "u", "n", "d", "e", "f"]

undefined рассматривается как строка "неопределенный" .

4
ответ дан 29 November 2019 в 23:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: