Объединить два выражения регулярных выражений в одно - PullRequest
0 голосов
/ 04 июня 2018

Регулярное выражение должно соответствовать всем положительным двойным числам с максимум двумя цифрами после десятичной точки, числами больше 0,01, а также научной нотацией, например (1.0E7).

Мне удалось решить эти две проблемы по отдельности.

Для сопоставления всех положительных двойных чисел с максимум 2 цифрами после десятичной точки и числами больше 0,01:

"^(?!0+\\.0+$)^\\d+(?:\\.\\d{1,2})?$"

Для любых чисел, включая научные обозначения:

"^[+-]?\\d+(?:\\.\\d*(?:[eE][+-]?\\d+)?)?$"

Проблема возникает, когда я хочу соединить их в один.

Я попробовал методы, описанные здесь , но ни один из них не работал для меня.JavaScript / AngularJS - это используемый язык, если он имеет какое-либо значение.

Есть предложения?

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Попробуйте:

  • полоса ^$
  • заключите каждое оригинальное регулярное выражение в группу без захвата
  • 'ИЛИ'группы
  • заключают целое в не захватывающую группу
  • повторно добавляют ^ $ ко всему выражению.

Результат:

^(?:(?:(?!0+\\.0+$)^\\d+(?:\\.\\d{1,2})?)|(?:[+-]?\\d+(?:\\.\\d*(?:[eE][+-]?\\d+)?)?))$
0 голосов

Вы можете разделить свое регулярное выражение на блоки

(^(?!0+\\.0+$)^\\d+(?:\\.\\d{1,2}))?$ ?(^[+-]?\\d+(?:\\.\\d*(?:[eE][+-]?\\d+)?)?$)
...