Ответ 1
Поскольку вы создаете свое регулярное выражение из строки, вы должны удвоить обратную косую черту:
var regEx = new RegExp("^(0[1-9]|1[0-2])/\\d{4}$", "g");
Когда вы начинаете со строки, вы должны учитывать тот факт, что регулярное выражение сначала будет проанализировано как таковое, то есть как строковая константа JavaScript. Синтаксис для строковых констант ничего не знает о регулярных выражениях, и он имеет свое собственное использование для символов обратной косой черты. Таким образом, к тому времени, когда синтаксический анализатор завершит работу со строками вашего регулярного выражения, он будет выглядеть совсем иначе, чем когда вы смотрите на свой исходный код. Ваша исходная строка выглядит так
"^(0[1-9]|1[0-2])/\d{4}$"
но после разбора строки это
^(0[1-9]|1[0-2])/d{4}$
Обратите внимание, что \d
теперь просто d
.
Удваивая символы обратной косой черты, вы сообщаете анализатору строк, что вы хотите одиночные реальные обратные косые черты в строковом значении.
Здесь действительно нет причин не использовать синтаксис регулярных выражений:
var regEx = /^(0[1-9]|1[0-2])\/\d{4}$/g;
редактировать - я также заметил, что есть встроенный символ "/", который должен быть заключен в кавычки, если вы используете синтаксис регулярных выражений.