Javascript Объединить 2 регулярных выражения - PullRequest
4 голосов
/ 18 июня 2020

У меня есть пара регулярных выражений, которые я планирую объединить. Итак, первое регулярное выражение выглядит следующим образом (позволяет суммы с определенными разделителями тысяч и десятичными разделителями)

"^-?(\\d+|\\d{1,3}(,\\d{3})*)?(\\.(\\d+)?)?$"

У меня есть аналогичные другие регулярные выражения (на основе разных языков, например, в другом будет запятая в качестве десятичного разделителя)

Итак, с указанным выше регулярным выражением ниже приведены допустимые / недопустимые значения

123.11 (Valid)
1'23 (Invalid)

Со вторым регулярным выражением я хочу, чтобы строка могла содержать максимум 13 цифр (включая до или после десятичной дроби)

^[^\\d]*?(\\d|\\d[^\\d]+){0,13}$

В приведенном выше регулярном выражении следующие допустимые / недопустимые значения:

1234567890123 (Valid - 13 digits)
12345678901234 (Invalid - 14 digits)
1234567890.123 (Valid as 13 digits...10.3)
1234567890.1234 (Invalid as 14 digits...10.4)

Можно ли каким-то образом объединить 2 регулярных выражения? Однако я не хочу трогать первое регулярное выражение (иметь разные комбинации в зависимости от разных языков). Но было бы неплохо как-то динамически добавить 2-е регулярное выражение в первое?

Итак, я могу гибко использовать второе регулярное выражение, поскольку оно не основано ни на каком языковом стандарте, но всегда будет одинаковым и в основном проверяет максимум 13 цифр в строке. Затем я проверю свою строку с помощью консолидированного регулярного выражения.

1 Ответ

4 голосов
/ 18 июня 2020

Вы можете оставить первый шаблон как есть, просто добавив к нему

(?=^\D*(?:\d\D*){0,13}$)

Шаблон (?=^\D*(?:\d\D*){0,13}$) представляет положительный просмотр вперед , который соответствует местоположению, за которым сразу следует

  • ^ - начало строки
  • \D* - 0+ нецифровых символов
  • (?:\d\D*){0,13} - от 0 до 13 вхождений di git за которым следует не-di git char
  • $ - конец строки.

Полный JavaScript определение регулярного выражения:

var regex1 = "^-?(\\d+|\\d{1,3}(,\\d{3})*)?(\\.(\\d+)?)?$";     // Not to be touched
var consolidated_regex = "(?=^\\D*(?:\\d\\D*){0,13}$)" + regex1;    

См. демонстрацию полного регулярного выражения .

Подробности

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