Используйте двойной слэш спасся:
var re = RegExp('^\\d+(?:\\.\\d{0,1})?$');
И он должен работать.
В JavaScript вы можете использовать литералы и конструктор. В буквальной нотации (см. Предложение anubhava), вам нужно добавить / ... /
, а затем вам не нужно скрывать косые черты. При использовании объекта RegExp
(конструктор) вы должны избегать обратных косых черт.
Конструктор хорош, когда вам нужно передать переменные в ваш шаблон. В других случаях предпочтительной является буквальная запись.
var re = /^\d+(?:\.\d?)?$/;
\d{0,1}
такое же, как \d?
, как ?
означает 0 or 1, greedy
.
См. more about that difference on MDN.
Литеральная нотация обеспечивает компиляцию регулярного выражения при вычислении выражения. Используйте литеральную запись, когда регулярное выражение останется постоянным. Например, если для построения регулярного выражения, используемого в цикле, используется , то регулярное выражение не будет перекомпилировано на каждой итерации.
Конструктор объекта регулярного выражения, например, новый RegExp ('ab + c'), обеспечивает компиляцию времени выполнения регулярного выражения . Используйте функцию конструктора, когда вы знаете, что шаблон выражения будет меняться, или вы не знаете шаблон, и получают его из другого источника, такого как ввод пользователя.
При использовании функции конструктора нормальные правила escape строки (предшествующие специальные символы с \ при включении в строку) необходимы .
Пожалуйста, объясните, почему двойной побег необходимо. Если нет, я добавлю его позже. – RudePeopleStepOff
Спасибо за комментарий, я добавил несколько объяснений. – anubhava
Неверно, что * \ d {0,1} можно заменить на \ d **. '\ d {0,1}' совпадает с '\ d?' как '?' означает «0 или 1, жадный». Смотрите мой пост. –