новое регулярное выражение (‘^ d {2} . d {10} $’) не работает

#javascript #regex

#javascript #регулярное выражение

Вопрос:

Я хочу протестировать формат строки. Эта строка должна начинаться со знака, затем 2 цифры, затем . знак, затем 10 цифр.

 /^ d{2}.d{10}$/.test(' 34.2398320186');
  

Таким образом, это работает (вы можете его протестировать). Но когда я использую RegExp , он говорит, что синтаксис имеет недопустимую ошибку квантификатора. Что не так?

Ответ №1:

Вы должны экранировать с помощью второго \

 new RegExp('^\ \d{2}\.\d{10}$'); // should work
  

Я добавлю рекомендацию от http://www.regular-expressions.info/javascript.html

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

Ответ №2:

Поскольку вы указываете регулярное выражение в виде строки, вам также необходимо экранировать », потому что это также escape-символ строки. Итак, вы хотели бы:

 new RegExp('^\ \d{2}\.\d{10}$');
  

Ответ №3:

Вы можете попробовать это, если не хотите избегать обратной косой черты

 var regex = /^ d{2}.d{10}$/ 
new RegExp(regex).test(' 34.2398320186');
  

Если вы хотите использовать string в качестве параметра для регулярного выражения, вам нужно экранировать обратную косую черту.

Комментарии:

1. Учитывая, что у вас уже есть регулярное выражение в строке 1, почему вы должны использовать «конструктор»?

2. @xanatos Я не уверен, что делает OP, я просто указал, что он отлично работает, когда вы используете этот конкретный конструктор.