RGex - Viết regex dễ hơn ăn kẹo
Mục lục
Mục lục
Chắc hẳn là một lập trình viên, không ít lần bạn phải “vò đầu bứt tóc” với Regular Expression (Regex) đúng không? Cái chuỗi ký tự loằng ngoằng, khó đọc, khó viết, và càng khó để debug. Nhưng đừng lo, hôm nay mình sẽ giới thiệu cho các bạn một “vị cứu tinh” có thể thay đổi hoàn toàn cách bạn làm việc với Regex.
RGex là một nền tảng mạnh mẽ giúp bạn xây dựng biểu thức chính quy (regex) một cách liền mạch theo kiểu “chainable”, đi kèm với bộ tiện ích xác thực toàn diện và khả năng xử lý ngôn ngữ tự nhiên để biến văn bản thông thường thành Regex.
Những Tính Năng “Ăn Tiền”
✨ Trình xây dựng Regex liền mạch (Fluent Builder): Xây dựng các biểu thức Regex phức tạp bằng một API đơn giản, có thể nối chuỗi các phương thức lại với nhau. Cực kỳ trực quan!
🗣️ Chuyển văn bản thành Regex (Text-to-Regex - t2r): Đây là tính năng “ảo diệu” nhất! Bạn chỉ cần mô tả bằng ngôn ngữ tự nhiên, RGex sẽ tự động chuyển nó thành pattern Regex.
🔐 Xác thực mật khẩu nâng cao: Phân tích độ mạnh của mật khẩu dựa trên nhiều tiêu chí và thậm chí có thể tạo ra mật khẩu mạnh cho bạn.
📚 Thư viện Pattern có sẵn: Một kho tàng các pattern thông dụng cho email, URL, thẻ tín dụng, và nhiều hơn nữa. Không cần phải “phát minh lại bánh xe”.
🧩 Module hóa & Gọn nhẹ: Chỉ import những tính năng bạn cần, giúp giữ cho kích thước bundle của dự án luôn nhỏ gọn.
💪 Hỗ trợ TypeScript đầy đủ: Được viết hoàn toàn bằng TypeScript, mang lại trải nghiệm lập trình tuyệt vời với type-safety và auto-complete.
Cài Đặt
Dùng trình quản lý package bạn yêu thích:
- NPM
npm install rgex
- Bun
bun install rgex
- Pnpm
pnpm add rgex
- Yarn
yarn add rgex
Bắt Đầu Nhanh Gọn Lẹ
RGex cung cấp nhiều cách để tạo và sử dụng Regex, từ việc “ra lệnh” bằng ngôn ngữ tự nhiên cho đến việc tự tay xây dựng từng bước.
Chuyển Văn Bản Thành Regex (t2r)
Hãy quên đi việc phải tra cứu cú pháp Regex phức tạp. Giờ đây, bạn chỉ cần “nói” cho RGex biết bạn muốn gì.
import { t2r } from 'rgex';
// Pattern email đơn giản
const emailResult = t2r('email address');
const emailRegex = emailResult.pattern; // /^[a-zA-Z0-9...
console.log(emailRegex.test('[email protected]')); // true
// Một pattern phức tạp hơn
const result = t2r('password with 2 uppercase, 2 numbers, and 12+ characters');
// Dịch nôm na: "mật khẩu có 2 chữ hoa, 2 số, và từ 12 ký tự trở lên"
console.log(result.pattern.test('MyP@ssword123')); // true
Trình Xây Dựng Liền Mạch (rgex)
Nếu bạn thích xây dựng mọi thứ từng bước một, như chơi LEGO vậy, thì Fluent Builder sinh ra là dành cho bạn.
import { rgex } from 'rgex';
const pattern = rgex()
.start() // Bắt đầu chuỗi
.literal('user-') // Chuỗi cố định 'user-'
.digit() // Một chữ số
.quantifier(4) // Lặp lại 4 lần
.end() // Kết thúc chuỗi
.build(); // Tạo ra pattern: /^user-\d{4}$/
console.log(pattern.test('user-1234')); // true
console.log(pattern.test('user-abcd')); // false
Xác Thực Mật Khẩu
Kiểm tra độ mạnh của mật khẩu hoặc tạo một mật khẩu mới an toàn.
import { validatePassword, generateStrongPassword } from 'rgex';
// Kiểm tra một mật khẩu
const validation = validatePassword('WeakPass1');
console.log(validation.strength); // 'fair' (khá)
console.log(validation.score); // 55
console.log(validation.error); // { message: '...', requirements: ['...'] }
// Tạo một mật khẩu mạnh
const newPassword = generateStrongPassword(16);
// Ví dụ: 'aB5!cDe6$fGh7#iJk'
console.log(newPassword);
API dành cho ai thích “vọc” sâu
Các hàm thông minh, thông dụng
t2r(humanText, [testValue])
Chuyển đổi một mô tả bằng văn bản thông thường thành một pattern Regex. Đây là trái tim của tính năng xử lý ngôn ngữ tự nhiên. Các tên gọi khác: h2r, textToRegex, humanToRegex, parseHumanTextToRegex.
humanText: string - Mô tả bằng ngôn ngữ tự nhiên về pattern bạn muốn.
testValue: string (tùy chọn) - Một chuỗi để kiểm tra với pattern được tạo ra nhằm tăng độ tin cậy.
Trả về: TextExtractionResult - Một object chứa pattern, điểm tin cậy, và mô tả.
import { t2r } from 'rgex';
const result = t2r('url with https only'); // "url chỉ có https"
if (result.success) {
console.log(result.pattern);
// /https:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/
console.log(result.confidence); // ví dụ: 0.8
}
rgex([pattern], [options])
Hàm factory để tạo một instance RGex builder mới.
pattern: string (tùy chọn) - Một chuỗi pattern Regex ban đầu.
options: RegexBuilderOptions (tùy chọn) - Các cờ (flag) Regex ban đầu.
Trả về: Một instance RGex mới.
import { rgex } from 'rgex';
const pattern = rgex('\\d{3}', { global: true });
console.log(pattern.toString()); // /\d{3}/g
Class RGex
Class cốt lõi để xây dựng các biểu thức chính quy.
new RGex([pattern], [options]) hoặc RGex.create([pattern], [options])
Tạo một instance RGex mới.
import { RGex } from 'rgex';
const builder = new RGex();
// hoặc
const builder = RGex.create();
Các Phương Thức Builder
Tất cả các phương thức builder đều có thể nối chuỗi (chainable).
.start(): Khẳng định vị trí bắt đầu của chuỗi (^).
.end(): Khẳng định vị trí kết thúc của chuỗi ($).
.literal(text): Thêm một chuỗi ký tự cố định, tự động escape các ký tự đặc biệt.
.raw(pattern): Thêm một chuỗi pattern Regex thô, không escape.
.digit(): Khớp với bất kỳ chữ số nào (\d).
.word(): Khớp với bất kỳ ký tự từ nào (\w).
.whitespace(): Khớp với bất kỳ ký tự khoảng trắng nào (\s).
.any(): Khớp với bất kỳ ký tự nào trừ dòng mới (.).
.group(pattern): Tạo một capturing group (...).
.or(pattern): Thêm toán tử OR (|).
.quantifier(min, [max]): Chỉ định số lần lặp lại {min,max}.
.oneOrMore(): Thêm + (một hoặc nhiều lần).
.zeroOrMore(): Thêm * (không hoặc nhiều lần).
.optional(): Thêm ? (không hoặc một lần).
.lookahead(pattern, [negative]): Thêm một lookahead dương (?=...) hoặc âm (?!...).
.lookbehind(pattern, [negative]): Thêm một lookbehind dương (?<=...) hoặc âm (?-.email(),.url(),.phone()`, v.v…: Thêm các pattern có sẵn.
.global(true), .ignoreCase(true), v.v…: Thiết lập các cờ Regex.
.build(): Trả về đối tượng RegExp cuối cùng.
.test(input): Kiểm tra pattern với một chuỗi đầu vào.
import { RGex } from 'rgex';
const usernameRegex = RGex.create()
.start()
.charClass('a-zA-Z') // Phải bắt đầu bằng một chữ cái
.charClass('a-zA-Z0-9_')
.quantifier(2, 19) // Theo sau là 2-19 ký tự từ
.end()
.ignoreCase() // Không phân biệt hoa thường
.build(); // /^[a-zA-Z][a-zA-Z0-9_]{2,19}$/i
console.log(usernameRegex.test('ValidUser_123')); // true
Các Tiện Ích Mật Khẩu
validatePassword(password, [options])
Phân tích một mật khẩu dựa trên một bộ quy tắc.
password: string - Mật khẩu cần xác thực.
options: PasswordValidationOptions (tùy chọn) - Tùy chỉnh các quy tắc xác thực (ví dụ: minLength, hasNumber).
Trả về: PasswordValidationResult - Một object chứa điểm, độ mạnh, và chi tiết pass/fail cho mỗi quy tắc.
import { validatePassword } from 'rgex';
const result = validatePassword('P@ssw0rd123', {
minLength: 10,
noCommonWords: true,
});
console.log(result.strength); // 'strong' (mạnh)
console.log(result.score); // 85
generateStrongPassword([length], [options])
Tạo một mật khẩu ngẫu nhiên và mạnh.
length: number (tùy chọn, mặc định: 12) - Độ dài mật khẩu mong muốn.
options: PasswordValidationOptions (tùy chọn) - Tùy chỉnh các bộ ký tự bắt buộc.
Trả về: string - Một mật khẩu được tạo ra một cách an toàn.
import { generateStrongPassword } from 'rgex';
const password = generateStrongPassword(16, { hasSymbol: true });
console.log(password);
Các Hàm Tiện Ích Khác
escapeRegex(text)
Escape các ký tự đặc biệt của Regex trong một chuỗi.
import { escapeRegex } from 'rgex';
console.log(escapeRegex('hello (world)')); // 'hello \(world\)'
isValidRegex(pattern)
Kiểm tra xem một chuỗi có phải là một pattern Regex hợp lệ hay không.
import { isValidRegex } from 'rgex';
console.log(isValidRegex('^[a-z]+
---
# Các Hằng Số
## `REGEX_PATTERNS`
Một object chứa một bộ sưu tập lớn các pattern Regex có sẵn dưới dạng chuỗi.
```javascript
import { REGEX_PATTERNS } from 'rgex';
const uuidRegex = new RegExp(REGEX_PATTERNS.UUID);
console.log(uuidRegex.test('123e4567-e89b-12d3-a456-426614174000')); // true
COMMON_PASSWORDS
Một mảng chứa các mật khẩu phổ biến được sử dụng bởi hàm validatePassword.
import { COMMON_PASSWORDS } from 'rgex';
console.log(COMMON_PASSWORDS.includes('password')); // true
Cảm ơn các bạn đã đọc
RGex là một công cụ cực kỳ hữu ích, giúp cho “nỗi đau” mang tên Regex trở nên dễ chịu hơn rất nhiều. Dù bạn là người mới bắt đầu hay đã là một “lão làng”, mình tin rằng RGex sẽ giúp bạn tiết kiệm được rất nhiều thời gian và công sức. Hãy cài đặt và trải nghiệm ngay hôm nay nhé