В данный момент я работаю над лексером javascript для побочного проекта, и при запуске его в тестовой кодовой базе я наткнулся на регулярное выражение, которое нашему лексеру не нравится:
/^(https?|ftp|tel|mailto):(\/\/|[^/])[^ ]+(\/|$)|^[^: ]+(\/|$)|^[\w.]+:\d+(\/|$)/
Проблема в том, что этот неэкранированный прямой sla sh здесь: [^/]
, который наш лексер интерпретирует как терминатор для литерала регулярного выражения.
Я тестировал это в node и chrome v8, и это кажется допустимым синтаксисом. Однако я не могу найти никакой документации, чтобы заявить, что использование каретки ^
как NOT
в регулярном выражении javascript также функционирует как escape-символ для прямого sla sh /
.
Может ли кто-нибудь помочь мне найти здесь документацию или официальное объяснение правил?