"use client"; import * as React from "react"; import { cn } from "./lib/utils"; export interface RegexVisualizerProps extends React.HTMLAttributes { defaultPattern?: string; defaultSample?: string; } /** Regex match highlighter with group readout. */ export function RegexVisualizer({ defaultPattern = "ROW [A-Z]", defaultSample = "ROW C SEAT 12, ROW D SEAT 04", className, ...props }: RegexVisualizerProps) { const [pattern, setPattern] = React.useState(defaultPattern); const [sample, setSample] = React.useState(defaultSample); const parts = React.useMemo(() => { try { const re = new RegExp(`(${pattern})`, "g"); return sample.split(re); } catch { return [sample]; } }, [pattern, sample]); let valid = true; try { new RegExp(pattern); } catch { valid = false; } return (

Regex visualizer

setPattern(e.target.value)} spellCheck={false} aria-label="Regex pattern" className={cn("mt-2 w-full rounded-md border border-dashed bg-secondary/40 p-2 font-mono text-sm text-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring", valid ? "border-border" : "border-destructive")} />