این ابزار از کدام گویش 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' هرگز در متن مطابقتیافته ظاهر نمیشود.