Хорошо, я задал этот вопрос только для того, чтобы вернуться к своему собственному ответу.
Visual Studio, похоже, не имеет типичных упреждающих конструкций. У него есть аналогичное отрицательное утверждение нулевой ширины. Синтаксис ~ (x) означает, что шаблон не соответствует x в этой точке шаблона. Используя эту конструкцию, я придумал следующее: ^(.~(//))*bas
, которое работает очень хорошо, но не исключает строку, где // - первые два символа в строке. Версия для исправления: ^~(//)(.~(//))*bas