Literal و escape نویسهٔ ویژه
نقطه، ستاره و سایر metacharacterها معنی ویژه دارند؛ برای جستوجوی خود نویسه، آن را escape کنید.
const wordPattern = /cat/;const literalDotPattern = /\./;wordPattern.test("a cat sleeps");
راهنمای سریع ساخت الگوهای Regex برای جستوجو، استخراج و اعتبارسنجی رشتهها. عبارت منظم الگوی جستوجو در متن است؛ جزئیات flavor میان JavaScript، Python، shell و ابزارها میتواند فرق کند. ابتدا با pattern کوچک شروع کنید و رفتار آن را روی ورودیهای نمونه و مرزی بسنجید. Quantifier تعداد تکرار را تعیین میکند، group برای دستهبندی یا capture است و alternation چند گزینه را میپذیرد. پرانتز و ترتیب را صریح بنویسید تا precedence الگو قابل فهم بماند. از این صفحه بهعنوان مرجع سریع استفاده کنید و مثالها و نکتهها را با نسخهٔ ابزار، نیاز و شرایط واقعی پروژهٔ خود تطبیق دهید.
نقطه، ستاره و سایر metacharacterها معنی ویژه دارند؛ برای جستوجوی خود نویسه، آن را escape کنید.
const wordPattern = /cat/;const literalDotPattern = /\./;wordPattern.test("a cat sleeps");کلاس یکی از نویسهها را میگیرد و بازههایی مانند a-z یا 0-9 را میپذیرد.
[aeiou] یکی از حروف صدادار[0-9] یک رقم ASCII[a-zA-Z] یک حرف لاتین[^0-9] نویسهای بهجز رقمدر ECMAScript، shorthandهای d و w عمدتاً بر مبنای ASCII هستند؛ رفتار Unicode و flavor را در موتور مقصد بررسی کنید.
\d رقم ASCII\D نویسهٔ غیررقمی\w نویسهٔ واژهٔ ASCII و _\W نویسهٔ غیرواژه\s فاصلهٔ سفید\S نویسهٔ غیرسفیدلنگرها جایگاه را میسنجند نه خود نویسه را؛ حالت multiline رفتار مرز خط را تغییر میدهد.
^start ابتدای ورودی یا خطend$ انتهای ورودی یا خط\bword\b مرز واژه\Bword جایگاهی که مرز واژه نیستکمینه/بیشینه را محدود کنید تا الگو بیش از محدودهٔ لازم مصرف نکند.
a* صفر یا بیشترa+ یک یا بیشترa? صفر یا یکa{3} دقیقاً سه بارa{2,5} بین دو تا پنج بارa{2,} دستکم دو بارquantifier پیشفرض حریصانه است؛ پسوند ? نسخهٔ lazy میسازد و معمولاً کوتاهترین تطبیق را میگیرد.
".*" تطبیق حریصانه".*?" تطبیق کمینه"[^"]*" متن داخل کوتیشن بدون عبور از کوتیشنپرانتز معمولی مقدار را capture میکند؛ گروه غیرگیرنده ساختار تقدم را نگه میدارد بدون افزودن capture.
(\d{4})-(\d{2})-(\d{2})(?:cat|dog)گزینهها را با | جدا و برای تعیین تقدم از پرانتز استفاده کنید؛ backreference به capture پیشین برمیگردد.
^(cat|dog)$(['"]).*?\1lookahead شرط را در سمت راست جایگاه میسنجد؛ نسخهٔ منفی یعنی شرط بعدی برقرار نباشد.
\d+(?= USD) عدد پیش از USD^(?!admin$).+ خطی که دقیقاً admin نیستlookbehind شرط را پیش از جایگاه بررسی میکند؛ پشتیبانی و محدودیت طول آن را در موتور هدف بررسی کنید.
(?<=\$)\d+(?:\.\d{2})?پرچمها را با literal یا constructor مشخص کنید؛ g و y در اجرای تکراری state داخلی lastIndex دارند.
const caseInsensitive = /hello/i;const allMatches = /\d+/g;const multiline = /^item/im;const unicode = /\p{L}+/u;const dotAll = /a.*b/s;پرچمها رفتار تشخیص بزرگی حروف، یافتن همهٔ تطبیقها، خطوط، newline و Unicode را تعیین میکنند.
i بدون حساسیت به بزرگی حروفg همهٔ تطبیقهاm لنگرها برای هر خطs نقطه newline را هم میگیردu رفتار Unicodey تطبیق از lastIndexliteral برای الگوی ثابت خواناتر است؛ در constructor، backslash رشته نیز باید escape شود.
const fixedPattern = /^user-\d+$/i;const prefix = "order";const dynamicPattern = new RegExp(`^${prefix}-\\d+$`, "i");test نتیجهٔ بولی میدهد و exec جزئیات match و capture را برمیگرداند.
const pattern = /#(\d+)/;pattern.test("issue #42");const match = pattern.exec("issue #42");match?.[1]; // "42"matchAll به پرچم g نیاز دارد و iterator شامل captureهای هر تطبیق است.
const text = "id=12 id=34";const ids = [...text.matchAll(/id=(\d+)/g)] .map((match) => match[1]);replace با function برای تبدیل امنتر و کنترلشده مناسب است؛ دادهٔ نامطمئن را مستقیم به HTML تبدیل نکنید.
const date = "2026-10-22";const localized = date.replace( /^(\d{4})-(\d{2})-(\d{2})$/, "$3/$2/$1");search اولین تطبیق را پیدا میکند و findall همهٔ نتیجهها را به شکل مقدار یا tuple گروهها برمیگرداند.
import resentence = "Order 42 is ready"match = re.search(r"\d+", sentence)numbers = re.findall(r"\d+", "12, 34, 56")finditer برای پیمایش تنبل match objectها و گرفتن موقعیت هر تطبیق مناسب است.
for match in re.finditer(r"\d+", "12 and 345"): print(match.group(), match.span())split با الگو جدا میکند؛ sub تطبیقها را جایگزین میکند و flags مانند MULTILINE را جداگانه میگیرد.
parts = re.split(r"\d+", "a12b34c")cleaned = re.sub(r"\s+", " ", "many spaces").strip()pattern = re.compile(r"\bcat\b", flags=re.IGNORECASE)در flavor ECMAScript، \d رقم ASCII و \w نویسهٔ واژهٔ ASCII را میگیرد؛ رفتار flavorها و Unicode را جدا بررسی کنید.
کلاسها: [abc] یکی از نویسهها و [0-9] یک رقم.
تکرار: * صفر یا بیشتر، + یک یا بیشتر، ? اختیاری.
تعداد دقیق: {3} و بازه: {2,5}؛ برای کمینه بازه {2,}.
^ و $ مرز رشته را میگیرند؛ در حالت multiline رفتارشان برای هر خط تغییر میکند.
گروه capture با (pattern) و گروه غیرگیرنده با (?:pattern).
تناوب را با cat|dog بنویسید و برای تقدم از پرانتز استفاده کنید.
حریصانه و کمینه: .* در برابر .*?; دامنه تطبیق را محدود کنید.
پرچمهای رایج: i بدون حساسیت به بزرگی حروف، g همه تطبیقها، m چندخطی.
Regex را با ورودیهای مرزی و نامعتبر آزمایش کنید؛ برای ورودی ناشناس الگو را محدود کنید.
نویسههای ویژه را با \ escape کنید و در JavaScript برای متن متغیر از RegExp.escape() در محیطهای پشتیبان یا escape معتبر استفاده کنید.
برای ایمیل و URL از اعتبارسنجی ساده و سیاست روشن استفاده کنید؛ یک regex بسیار پیچیده جای parser و اعتبارسنجی واقعی را نمیگیرد.
Regex را با نمونهٔ معتبر، نامعتبر، خالی و بسیار بلند آزمایش کنید؛ الگوهای پرهزینه و backtracking شدید میتوانند ورودیهای بزرگ را کند کنند.
رفتار shorthandهایی مانند \w و \d، lookbehind و Unicode میان موتورهای Regex فرق میکند؛ flavor مقصد را قبل از انتقال الگو بررسی کنید.