Tarayıcınız güncel değil

Bu siteyi görüntülemek için tarayıcınızın veya cihazınızın işletim sisteminin güncellenmesi gerekiyor.

Your browser is out of date. Please update iOS or your browser to view this site.

پرش به محتوای اصلی
Gizke.com
وبلاگ

آزمایشگر Regex

روی دستگاه شما اجرا می‌شود. چیزی ارسال نمی‌شود.

پرچم‌ها

الگوهای رایج

رشته آزمایشی

هیچ تطبیقی یافت نشد

توضیح

برای دیدن شرح عملکرد هر بخش، الگویی در بالا تایپ کنید

عبارات باقاعده جاوااسکریپت را با برجسته‌سازی زنده تطبیق‌ها، کاملاً در مرورگر خود آزمایش، توضیح و رفع اشکال کنید.

عبارت باقاعده (regex) الگویی است که برای تطبیق، یافتن یا جایگزینی متن استفاده می‌شود - همان ابزار زیربنایی که جستجو-و-جایگزینی در ویرایشگرهای کد، اعتبارسنجی فرم‌ها و تجزیه گزارش‌ها را ممکن می‌سازد. این آزمایشگر موتور regex بومی جاوااسکریپت را مستقیماً در مرورگر شما اجرا می‌کند: یک الگو و یک رشته آزمایشی تایپ کنید، سپس هر تطبیق را برجسته می‌کند، گروه‌های ضبط را تفکیک می‌کند، پیش‌نمایش جایگزینی‌ها را نشان می‌دهد و به زبان ساده توضیح می‌دهد که هر بخش از الگو چه کاری انجام می‌دهد. هیچ‌چیزی که تایپ می‌کنید هرگز به‌جایی بارگذاری نمی‌شود.

پرسش‌های متداول

این ابزار از کدام گویش regex استفاده می‌کند؟
موتور regex داخلی جاوااسکریپت (همان موتوری که پشت RegExp و String.prototype.match/replace قرار دارد)، زیرا همه‌چیز در اینجا سمت کلاینت در مرورگر شما اجرا می‌شود نه روی یک سرور. این موتور بسیار شبیه به PCRE است اما چند تفاوت دارد - برای مثال، پشتیبانی از lookbehind به نسخه موتور بستگی دارد و گروه‌های نام‌دار از نحو (?<نام>...) استفاده می‌کنند.
چرا الگوی من فقط یک بار تطبیق پیدا می‌کند؟
به‌طور پیش‌فرض، بدون پرچم g (سراسری)، یک regex پس از اولین تطبیق متوقف می‌شود - این دقیقاً رفتار واقعی RegExp.exec() و String.match() در جاوااسکریپت را نشان می‌دهد. پرچم g را در بالا فعال کنید تا به‌جای فقط اولین مورد، هر تطبیق در رشته آزمایشی پیدا شود.
تفاوت (...) و (?:...) چیست؟
هر دو بخش‌هایی از الگو را با هم گروه‌بندی می‌کنند، اما فقط (...) - یک گروه ضبط - آنچه را تطبیق داده ذخیره می‌کند تا بعداً بتوانید به آن ارجاع دهید (به‌صورت $1، $2، ... در یک جایگزینی، یا در فهرست گروه‌های تطبیق). (?:...) یک گروه بدون ضبط است: گروه‌بندی می‌کند و کمیت‌سنج‌ها را اعمال می‌کند بدون آنکه تطبیق را نگه دارد - زمانی مفید است که به گروه‌بندی نیاز دارید اما به متن ضبط‌شده اهمیتی نمی‌دهید.
گروه‌های نام‌دار و جایگزینی‌های $<نام> چگونه کار می‌کنند؟
به‌جای (...)، بنویسید (?<نام>...) تا گروهی را تحت یک نام به‌جای صرفاً یک شماره ضبط کنید. در حالت جایگزینی، در متن جایگزین به آن به‌صورت $<نام> ارجاع دهید - برای مثال، (?<year>\d{4})-(?<month>\d{2}) که با $<month>/$<year> جایگزین شود، یک تاریخ را بدون نیاز به به‌خاطرسپاری شماره گروه‌ها بازآرایی می‌کند.
تفاوت بین یک کمی‌ساز حریص (greedy) و تنبل (lazy)، مانند + در برابر +؟ چیست؟
یک کمی‌ساز حریص (+، *، {2,4}) تا جای ممکن با متن مطابقت می‌یابد و تنها در صورت نیاز، برای اینکه بقیه الگو مطابقت پیدا کند، عقب‌نشینی می‌کند. یک کمی‌ساز تنبل - همان نماد به‌همراه ? - برعکس، تا حد ممکن با کمترین مقدار مطابقت پیدا می‌کند و فقط در صورت نیاز، یک کاراکتر در هر بار گسترش می‌یابد. برای مثال، <.+> در برابر <a><b> به‌صورت حریصانه با کل <a><b> مطابقت دارد، در حالی که <.+?> به‌صورت تنبلانه فقط با <a> مطابقت می‌یابد.
اگر پیش‌نگری و پس‌نگری (lookahead/lookbehind) هیچ کاراکتری را مصرف نمی‌کنند، در واقع چه چیزی را بررسی می‌کنند؟
آن‌ها بررسی می‌کنند که آیا یک الگو بلافاصله قبل یا بعد از موقعیت فعلی ظاهر می‌شود، بدون آنکه آن را در خودِ تطابق قرار دهند - بنابراین (?=...) و (?<=...) به‌جلو/عقب بررسی می‌کنند که چیزی باید وجود داشته باشد، در حالی که (?!...) و (?<!...) بررسی می‌کنند که نباید وجود داشته باشد. به همین دلیل می‌توانید از \d+(?=px) استفاده کنید تا فقط زمانی که یک عدد با 'px' دنبال می‌شود با آن مطابقت یابد، در حالی که خود 'px' هرگز در متن مطابقت‌یافته ظاهر نمی‌شود.
برای توسعه‌دهندگان: این صفحه را با پارامترهای `q` (الگو) و `text` (متن آزمایشی) در آدرس باز کنید - مثلاً gizke.com/regex?q=\d+&text=There are 42 apples - و هر دو به‌طور خودکار از پیش پر می‌شوند. اکثر بازدیدکنندگان به این نیازی ندارند؛ این ویژگی برای پیوند مستقیم به یک نمونه آماده است.

این ابزار را به اشتراک بگذارید

وبلاگدرباره ماتماسشرایط استفادهسیاست حفظ حریم خصوصی