Наверняка многие сталкивались с проблемой правильного описания и, как результат, поддержки регулярных выражений.
Особенно остро встает вопрос восприятия - правильно ли добавил группу захвата в последовательность условий, какой предполагается вывод, да и впринципе есть ли сейчас в регулярном выражении ошибки.
Да, можно исопльзовать сервисы вроде regex101.com, но ведь хочется не покидая среду разработки.
Недавно появилось отличное решение проблемы - ArkRegex как абстракция над
new RegExp() с выводом пояснительной информации и валидацией в типах Typescripthttps://arktype.io/docs/blog/arkregex
Пример из документации:
import { regex } from "arkregex"
const ok = regex("^ok$", "i")
// Regex<"ok" | "oK" | "Ok" | "OK", { flags: "i" }>
const semver = regex("^(\\d*)\\.(\\d*)\\.(\\d*)$")
// Regex<`${bigint}.${bigint}.${bigint}`, { captures: [`${bigint}`, `${bigint}`, `${bigint}`] }>
const email = regex("^(?<name>\\w+)@(?<domain>\\w+\\.\\w+)$")
// Regex<`${string}@${string}.${string}`, { names: { name: string; domain: `${string}.${string}`; }; ...>
Однако не обошлось без нюансов - во избежание проблем с производительностью, лучше ограничивать длину и сложность регулярного выражения (скорее всего большинство из вас не столкнутся с этим нюансом).
Если сильно увлечься, потенциально сложный вывод типов может сильно нагружать языковой сервер и typescript начнет с большой задержкой выводить типы проекта из-за сложных регулярных выражений в большом количестве.
Ждём
tsgo и существенного прироста производительности, чтобы не думать о нюансах.