@strling-lang/strling
v3.0.0
Published
Next-gen string pattern DSL & compiler
Maintainers
Readme
STRling - TypeScript Binding
Part of the STRling Project
💿 Installation
npm install @strling-lang/strling📦 Usage
Here is how to match a US Phone number (e.g., 555-0199) using STRling in TypeScript:
import { simply } from "@strling-lang/strling";
// Start of line.
// Match the area code (3 digits)
// Optional separator: [-. ]
// Match the central office code (3 digits)
// Optional separator: [-. ]
// Match the station number (4 digits)
// End of line.
const s = simply;
const phonePattern = s.merge(
s.start(),
s.capture(s.digit(3)),
s.may(s.anyOf("-", ".", " ")),
s.capture(s.digit(3)),
s.may(s.anyOf("-", ".", " ")),
s.capture(s.digit(4)),
s.end()
);
const regex = new RegExp(String(phonePattern));
console.assert(regex.test("555-123-4567"));Note: This compiles to the optimized regex:
^(\d{3})[-. ]?(\d{3})[-. ]?(\d{4})$
🚀 Why STRling?
Regular Expressions are powerful but notorious for being "write-only" code. STRling solves this by treating Regex as Software, not a string.
- 🧩 Composability: Regex strings are hard to merge. STRling lets you build reusable components (e.g.,
ip_address,email) and safely compose them into larger patterns without breaking operator precedence or capturing groups. - 🛡️ Type Safety: Catch syntax errors, invalid ranges, and incompatible flags at compile time inside your IDE, not at runtime when your app crashes.
- 🧠 IntelliSense & Autocomplete: Stop memorizing cryptic codes like
(?<=...). Use fluent, self-documenting methods likesimply.lookBehind(...)with full IDE discovery. - 📖 Readability First: Code is read far more often than it is written. STRling patterns describe intent, making them understandable to junior developers and future maintainers instantly.
- 🌍 Polyglot Engine: One mental model, 17 languages. Whether you are writing Rust, Python, or TypeScript, the syntax and behavior remain identical.
🏗️ Architecture
STRling follows a strict compiler pipeline architecture to ensure consistency across all ecosystems:
- Parse:
DSL -> AST(Abstract Syntax Tree)- Converts the human-readable STRling syntax into a structured tree.
- Compile:
AST -> IR(Intermediate Representation)- Transforms the AST into a target-agnostic intermediate representation, optimizing structures like literal sequences.
- Emit:
IR -> Target Regex- Generates the final, optimized regex string for the specific target engine (e.g., PCRE2, JS, Python
re).
- Generates the final, optimized regex string for the specific target engine (e.g., PCRE2, JS, Python
📚 Documentation
- API Reference: Detailed documentation for this binding.
- Project Hub: The main STRling repository.
- Specification: The core grammar and semantic specifications.
🌐 Connect
💖 Support
If you find STRling useful, consider starring the repository and contributing!
