آیا در جاوااسکریپت تابعی مانند RegExp.escape وجود دارد؟
در جاوااسکریپت، تابعی مشابه با RegExp.escape
که در زبانهایی مانند Ruby وجود دارد، به طور پیشفرض وجود ندارد. کار این تابع غیر فعال کردن کاراکترهای ویژه عبارات منظم در رشته مذکور است.
برای غیر فعال کردن کاراکترهای ویژه در یک رشته و جلوگیری از تداخل آنها با ساختارهای regex، میتوانید از کد زیر استفاده کنید:
function escapeRegex(string) {
return string.replace(/[/\-\\^$*+?.()|[\]{}]/g, '\\$&');
}
استفاده از این تابع به شما این امکان را میدهد که کاراکترهایی مانند ^
، $
، -
و /
را به درستی غیر فعال کنید. این کاراکترها ممکن است در شرایط خاص باعث ایجاد مشکلاتی در regex شوند. به عنوان مثال، -
در کلاسهای کاراکتری عبارات منظم برای ایجاد محدودهها به کار میرود (مانند a-z
) و ^
و $
به ترتیب نشاندهنده شروع و پایان رشته هستند.
اگر به دنبال یک راهحل جامعتر هستید، میتوانید از یک تابع با کاراکترهای ویژه بیشتر استفاده کنید که نه تنها کاراکترهای خاص، بلکه هر کاراکتری را که احتمال ایجاد مشکل دارد، به درستی غیر فعال می کند:
function regExpEscape(literal_string) {
return literal_string.replace(/[-[\]{}()*+!<=:?.\/\\^$|#\s,]/g, '\\$&');
}
همچنین، اگر شما از کتابخانه Lodash استفاده میکنید، از نسخه 3 به بعد می توانید از تابع _.escapeRegExp
استفاده کنید:
_.escapeRegExp('[lodash](https://lodash.com/)');
// → '\[lodash\]\(https:\/\/lodash\.com\/\)'
در نهایت، اگر نمیخواهید کل کتابخانه Lodash را بارگذاری کنید، میتوانید تنها آن تابع را بهصورت مجزا نصب کنید.
لیست برخی کاراکترهای ویژه در عبارات منظم (Regular Expressions)
- -: ایجاد یک بازه کاراکتری در یک کلاس کاراکتر.
- [: آغاز یک کلاس کاراکتر.
- ]: پایان یک کلاس کاراکتر.
- {: آغاز یک مشخصکننده تعدادی.
- }: پایان یک مشخصکننده تعدادی.
- (: آغاز یک گروه.
- ): پایان یک گروه.
- *: مشخصکننده تکرار صفر یا بیشتر.
- +: مشخصکننده تکرار یک یا بیشتر.
- ?: مشخصکننده تکرار صفر یا یک.
- .: مطابقت با هر کاراکتری.
- \: فرار کاراکترها و آغاز موجودیتها.
- ^: مشخصکننده شروع ناحیه تطبیق، و نفی تطبیق در یک کلاس کاراکتر.
- $: مشخصکننده پایان ناحیه تطبیق.
- |: مشخصکننده جایگزینی.
- #: مشخصکننده نظر در حالت فاصله آزاد.
- \s: در حالت فاصله آزاد نادیده گرفته میشود.
- ,: جداکننده مقادیر در مشخصکننده تعدادی.
- /: آغاز یا پایان یک عبارت.
- ::: تکمیل انواع گروه ویژه و بخشی از کلاسهای کاراکتری به سبک Perl.
- !: نفی گروه بدون عرض.
- <: بخشی از مشخصات گروه بدون عرض.
- =: بخشی از مشخصات گروه بدون عرض.