Регулярное выражение Звездный символ - PullRequest
1 голос
/ 29 июля 2011

Может быть, я что-то пропустил, но что не так с этим регулярным выражением?

var str = "lorem ipsum 12345 dolor";
var x = /\d+/.exec(str);
var y = /\d*/.exec(str);
console.log(x); // will print 12345
console.log(y); // will print "" but why ? 

Не могли бы вы объяснить, почему /\d*/.exec(str); возвращает пустую строку вместо "12345".* означает ноль или более совпадений.

Ответы [ 2 ]

7 голосов
/ 29 июля 2011

\d* соответствует нулю или более цифр в строке.Когда вы запускаете exec в регулярном выражении, оно начинается в начале ввода и возвращает первый экземпляр, который он находит по вашему заданному шаблону.

Так, где находится первый экземпляр \d* в этой строке?Ну, это первая позиция в строке, которая имеет ноль или более чисел после нее.Но они все имеют ноль или более чисел после них!Либо есть числа, либо их нет, но в любом случае они совпадают.Таким образом, первый экземпляр \d* - это просто подстрока нулевой длины, начинающаяся с первой позиции в строке.

1 голос
/ 29 июля 2011

* соответствует нулю или более.Может быть, я ошибаюсь, но не совпадет ли это с нулевыми цифрами, начинающимися с "lorem", отсюда и пустая строка?

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