Вы можете использовать отрицательное прогнозное утверждение :
^(?!excludepattern)includepattern
будет соответствовать includepattern
, если оно также не будет соответствовать excludepattern
.
Например,
^(?!\.\.)([\w.,]+/)+$
будет соответствовать любой последовательности букв, цифр, подчеркивания, точки или запятой, разделенных косой чертой, если только он не начинается с ..
(как в вашем примере).
Чтобы ответить на ваш комментарий (насколько я понимаю), попробуйте это:
^(?!.*\.\.)[\w.]*$
Это будет соответствовать строке, которая полностью состоит из буквенно-цифровых символов или точек, но нигде не содержит двух точек подряд. Это также соответствует пустой строке.