از شیء Regexp برای تطبیق متن با یک الگوی استفاده می شود.
برای معرفی عبارات منظم ، فصل عبارات منظم را در راهنمای JavaScript بخوانید.
شرح
نماد و سازنده تحت اللفظی
دو روش برای ایجاد یک شیء regexp وجود دارد: یک نماد تحت اللفظی و یک سازنده.
- نماد تحت اللفظی الگوی بین دو بریده و به دنبال آن پرچم های اختیاری ، پس از برش دوم است.
- عملکرد سازنده یا یک رشته یا یک شیء Regexp را به عنوان اولین پارامتر خود و یک رشته از پرچم های اختیاری به عنوان پارامتر دوم خود می گیرد.
سه عبارت زیر همان شیء بیان منظم را ایجاد می کنند:
محاصره کردندوباره= /ab+c/i; // نماد تحت اللفظی // یا محاصره کردندوباره= جدید regexp("AB+C", "من"); // سازنده با الگوی رشته به عنوان آرگومان اول // یا محاصره کردندوباره= جدید regexp(/ab+c/, "من"); // سازنده با بیان منظم به عنوان اولین استدلال
قبل از استفاده از عبارات منظم ، آنها باید گردآوری شوند. این فرآیند به آنها امکان می دهد تطبیق بیشتری را با کارآمدتر انجام دهند. اطلاعات بیشتر در مورد این فرآیند را می توان در اسناد dotnet یافت.
نماد تحت اللفظی منجر به تدوین بیان منظم در هنگام ارزیابی بیان می شود. از طرف دیگر ، سازنده شیء Regexp ، New REGEXP ('AB+C') منجر به تدوین زمان اجرا از بیان منظم می شود.
هنگامی که می خواهید عبارت منظم را از ورودی پویا بسازید ، از یک رشته به عنوان اولین آرگومان برای سازنده Regexp () استفاده کنید.
پرچم ها در سازنده
عبارت جدید regexp (/ab+c/، پرچم ها) با استفاده از منبع پارامتر اول و پرچم های ارائه شده توسط دوم ، یک regexp جدید ایجاد می کند.
هنگام استفاده از عملکرد سازنده ، قوانین فرار رشته عادی (قبل از کاراکترهای خاص با در هنگام حضور در یک رشته) لازم است.
به عنوان مثال ، موارد زیر معادل است:
محاصره کردندوباره= /w+/; // یا محاصره کردندوباره= جدید regexp("\ w+");
دستگیری ویژه برای regexes
توجه: اینکه آیا چیزی "regex" است می تواند از نوع اردک استفاده شود. لازم نیست یک regexp باشد!
برخی از روشهای داخلی به طور خاص با استفاده از regexes رفتار می کنند. آنها تصمیم می گیرند که آیا X در چندین مرحله یک regex است:
- X باید یک شی باشد (نه ابتدایی).
- اگر x [symbol. match] تعریف نشده است ، بررسی کنید که آیا این درست است.
- در غیر این صورت ، اگر x [symbol. match] تعریف نشده است ، بررسی کنید که آیا X با سازنده regexp ایجاد شده است یا خیر.(این مرحله به ندرت باید اتفاق بیفتد ، زیرا اگر X یک شیء Regexp است که با آن دستکاری نشده است ، باید دارای یک نماد باشد.
توجه داشته باشید که در بیشتر موارد ، این نماد را بررسی می کند.
- یک شیء واقعی Regexp که ارزش آن را نشان می دهد.
- یک شیء غیر regexp با یک نماد. ویژگی های متمایز به گونه ای رفتار می شود که گویی این یک regex است.
این انتخاب انجام شد زیرا مسابقه نشانگر ترین ویژگی است که چیزی برای تطبیق در نظر گرفته شده است.(Exec همچنین می تواند مورد استفاده قرار گیرد ، اما از آنجا که این یک خاصیت نماد نیست ، مثبت های کاذب زیادی نیز وجود خواهد داشت.) مکانهایی که با Regexes رفتار می کنند به ویژه عبارتند از:
- string. prototype. endswith () ، startswith () ، و شامل () اگر اولین آرگومان یک regex باشد ، یک نوع را پرتاب کنید.
- string. prototype. matchall () و جایگزین () بررسی کنید که آیا پرچم جهانی تنظیم شده است اگر اولین آرگومان قبل از استفاده از روش matchall یا matchall یا جایگزین آن باشد.
- سازنده Regexp () به طور مستقیم آرگومان الگوی را فقط در صورتی که الگوی یک regex باشد (در بین چند شرایط دیگر) برمی گرداند. اگر الگوی یک regex باشد ، به جای اینکه الگوی را به یک رشته وارد کند ، از منبع و پرچم های الگوی نیز بازجویی می کند.
به عنوان مثال ، string. prototype. endswith () تمام ورودی ها را به رشته ها وارد می کند ، اما اگر این استدلال یک regex باشد ، پرتاب می شود ، زیرا فقط برای مطابقت با رشته ها طراحی شده است و استفاده از regex احتمالاً یک اشتباه توسعه دهنده است.
"فوبار".به پایان می رسد با( شیب دار: () => "بار" >); // درست است، واقعی "فوبار".به پایان می رسد با(/بار/); // TypeError: اولین آرگومان به string. prototype. endswith نباید یک عبارت منظم باشد
می توانید با تنظیم مسابقه به یک مقدار فال که تعریف نشده است ، چک را انجام دهید. این بدان معنی است که از Regex نمی توان برای string. prototype. match () استفاده کرد (از آنجا که بدون مسابقه ، مسابقه () یک شیء جدید regexp را با دو برش محصور اضافه شده توسط re. tostring () ایجاد می کند ، اما می تواندبرای هر چیز دیگری مورد استفاده قرار می گیرد.
محاصره کردندوباره= /بار/g;دوباره[سمبل.همخوانی داشتن] = دروغ; "/نوار/g".به پایان می رسد با(re); // درست است، واقعیدوباره.اعطا کردن("بار"); // ['BAR' ، INDEX: 0 ، ورودی: "نوار" ، گروه ها: تعریف نشده] "نوار و بار".جایگزین کردن(re, "فو"); // 'foo & foo'
خصوصیات regexp مانند perl
توجه داشته باشید که چندین ویژگی Regexp دارای نام های بلند و کوتاه (مانند Perl) هستند. هر دو نام همیشه به یک مقدار یکسان اشاره دارند.(Perl زبان برنامه نویسی است که از آن جاوا اسکریپت عبارات منظم خود را مدل می کند.) همچنین به خصوصیات REGEXP مستهلک مراجعه کنید.
سازنده
یک شیء جدید regexp ایجاد می کند.
خصوصیات استاتیک
عملکرد سازنده که برای ایجاد اشیاء مشتق شده استفاده می شود.
خواص فقط خواندنی استاتیک که حاوی مسابقات بستر پرانتز هستند.
یک ویژگی استاتیک که شامل آخرین رشته ای است که در مقابل آن یک بیان منظم با موفقیت مطابقت داشت.
یک ویژگی استاتیک فقط خواندنی که شامل آخرین بستر همسان است.
یک ویژگی فقط خواندنی استاتیک که شامل آخرین مسابقه زیرزمینی پرانتز است.
یک ویژگی استاتیک فقط خواندنی که شامل بستر قبل از جدیدترین مسابقه است.
یک خاصیت استاتیک فقط خواندنی که شامل جدیدترین مسابقه است.
خصوصیات نمونه
این خصوصیات در regexp. prototype تعریف شده و توسط همه موارد REGEXP به اشتراک گذاشته می شود.
تابع سازنده که شیء نمونه را ایجاد کرده است. برای نمونه های REGEXP ، مقدار اولیه سازنده REGEXP است.
رشته ای که حاوی پرچم های شیء Regexp است.
چه . با خطوط جدید مطابقت دارد یا نه.
این که آیا بیان منظم را در برابر تمام مسابقات ممکن در یک رشته یا فقط در برابر اولین آزمایش کنید.
این که آیا نتیجه بیان منظم شاخص های شروع و پایان بسترهای ضبط شده را در معرض دید قرار می دهد.
اینکه در حین تلاش برای مسابقه در یک رشته ، پرونده را نادیده بگیریم.
چه در رشته ها در چندین خط جستجو کنید یا خیر.
متن الگوی.
آیا جستجو چسبنده است یا خیر.
آیا ویژگی های یونیکد فعال هستند یا خیر.
این خصوصیات خاصیت خود از هر نمونه regexp است.
شاخصی که در آن مسابقه بعدی را شروع کند.
روشهای نمونه
regexp. prototype. compile () کاهش یافته است
(دوباره) در حین اجرای یک اسکریپت یک عبارت منظم را گردآوری می کند.
جستجوی یک مسابقه را در پارامتر رشته خود انجام می دهد.
تست های یک مسابقه در پارامتر رشته خود.
رشته ای را نشان می دهد که شیء مشخص شده را نشان می دهد. روش Object. Prototype. ToString () را نادیده می گیرد.
عملکرد را با رشته های داده شده انجام می دهد و نتیجه مسابقه را برمی گرداند.
تمام مسابقات بیان منظم را در برابر یک رشته برمی گرداند.
مسابقات را در رشته های داده شده با بستر جدید جایگزین می کند.
مسابقه را در رشته داده شده جستجو می کند و شاخص را به الگوی موجود در رشته باز می گرداند.
تقسیم شده با جدا کردن رشته به زیر مجموعه ها ، رشته ها را به یک آرایه تقسیم می کنند.
مثال ها
با استفاده از یک عبارت منظم برای تغییر قالب داده
اسکریپت زیر از روش Replace () نمونه رشته استفاده می کند تا با یک نام در قالب اول مطابقت داشته باشد و آن را در قالب آخرین بار در ابتدا قرار دهد.
در متن جایگزینی ، اسکریپت از 1 و 2 دلار استفاده می کند تا نتایج پرانتزهای مربوطه مربوطه را در الگوی بیان منظم نشان دهد.
محاصره کردندوباره= /(w+)s(w+)/; محاصره کردنstr= "ماریا کروز"; محاصره کردنخبرنامه=str.جایگزین کردن(re, "2 دلار ، 1 دلار");کنسول.ورود به سیستم(خبرنامه);
این نمایش "کروز ، ماریا" را نشان می دهد.
با استفاده از بیان منظم به خطوط تقسیم با انتهای خط مختلف/انتهای خط/خط
پایان خط پیش فرض بسته به سیستم عامل (UNIX ، ویندوز و غیره) متفاوت است. تقسیم خط ارائه شده در این مثال روی همه سیستم عامل ها کار می کند.
محاصره کردنمتن= "برخی از متن n و برخی دیگر; محاصره کردنخط=متن.شکاف(/
|
|
/);کنسول.ورود به سیستم(خط); // ["برخی از متن ها" ، "و برخی دیگر" ، "و با این حال" ، "این پایان است"]
توجه داشته باشید که ترتیب الگوهای موجود در بیان منظم اهمیت دارد.
با استفاده از بیان منظم در چندین خط
محاصره کردنحرف= "لطفا بله nmake روز من!"; s.همخوانی داشتن(/آره.*روز/); // تهی را برمی گرداند s.همخوانی داشتن(/آره[^]*روز/); // برمی گردد ["بله nmake روز من"]
با استفاده از یک عبارت معمولی با پرچم چسبنده
پرچم چسبنده نشان می دهد که بیان منظم با تلاش برای مطابقت با شروع در regexp. prototype. lastindex ، تطبیق چسبنده را در رشته هدف انجام می دهد.
محاصره کردنstr= "#foo#"; محاصره کردنرگ= /فحش/y;رگ.vertindex= 1;رگ.تست(str); // درست است، واقعیرگ.vertindex= 5;رگ.تست(str); // false (LastIndex با پرچم چسبنده در نظر گرفته می شود)رگ.vertindex; // 0 (تنظیم مجدد پس از شکست مسابقه)
تفاوت بین پرچم چسبنده و پرچم جهانی
با پرچم چسبنده Y ، مسابقه بعدی باید در موقعیت LastIndex اتفاق بیفتد ، در حالی که با پرچم جهانی G ، مسابقه می تواند در موقعیت LastIndex یا بعد از آن اتفاق بیفتد:
محاصره کردندوباره= /d/y; اجازه دهید r; در حالی که ((r =دوباره.اعطا کردن("123 456"))) کنسول.ورود به سیستم(r, "و re. lastindex",دوباره.vertindex); > // ['1' ، فهرست: 0 ، ورودی: '123 456' ، گروه ها: تعریف نشده] و re. lastindex 1 // ['2' ، فهرست: 1 ، ورودی: '123 456' ، گروه ها: تعریف نشده] و re. lastindex 2 // ['3' ، فهرست: 2 ، ورودی: '123 456' ، گروه ها: تعریف نشده] و re. lastindex 3 // ... و دیگر مطابقت ندارد.
با پرچم جهانی G ، همه 6 رقم با هم همسان می شوند ، نه فقط 3.
بیان منظم و شخصیت های یونیکد
W و W فقط با شخصیت های مبتنی بر ASCII مطابقت دارد. به عنوان مثال ، a to z ، a to z ، 0 تا 9 و _.
برای مطابقت با شخصیت های زبانهای دیگر مانند سیریلیک یا عبری ، از uhhhh استفاده کنید ، جایی که hhhh ارزش یونیکد شخصیت در شش ضلعی است.
این مثال نشان می دهد که چگونه می توان شخصیت های یونیکد را از یک کلمه جدا کرد.
محاصره کردنمتن= "оразец متن на рra зызыке"; محاصره کردنرگ= /[ U0400- u04ff]+/g; محاصره کردنهمخوانی داشتن=رگ.اعطا کردن(متن);کنسول.ورود به سیستم(همخوانی داشتن[0]); // 'оразец'کنسول.ورود به سیستم(رگ.vertindex); // 7 محاصره کردنmatch2=رگ.اعطا کردن(متن);کنسول.ورود به سیستم(match2[0]); // "на" (متن را وارد نکرد ")کنسول.ورود به سیستم(رگ.vertindex); // 15 // و غیره
ویژگی Unicode Escapes با اجازه دادن به اظهاراتی مانند p (برای مطابقت با هر نامه سیریلیک) یا p/u (برای مطابقت با نامه از هر زبان) ، روش ساده تری برای هدف قرار دادن دامنه های خاص یونیکد فراهم می کند.
استخراج نام زیر دامنه از URL
محاصره کردنurl= "http://xxx. domain. com";کنسول.ورود به سیستم(/^https?://(.+?)./.اعطا کردن(url)[1]); // 'xxx'
توجه: به جای استفاده از عبارات منظم برای تجزیه و تحلیل URL ها ، معمولاً بهتر است با استفاده از API URL از مرورگرهای ایجاد شده در URL استفاده کنید.
ساختن یک عبارت منظم از ورودی های پویا
محاصره کردنصبحانه= ["بیکن", "تخم مرغ", "جو دوسر", "نان تست", "غلات"]; محاصره کردنسفارش= "اجازه دهید من مقداری بیکن و تخم مرغ بگیرم ، لطفا";سفارش.همخوانی داشتن(جدید regexp(`\ b (صبحانه های $.پیوستن("|")>)\b`, "G")); // بازگشت ['بیکن' ، 'تخم مرغ']
مشخصات فنی
| مشخصات |
| مشخصات زبان ecmascript# SEC-regexp-Regular-Expression-Obts |
سازگاری مرورگر
جداول BCD فقط در مرورگر بارگیری می شود
یادداشت های خاص Firefox
با شروع Firefox 34 ، در مورد یک گروه ضبط با کمیته ها که از ورزش آن جلوگیری می کنند ، متن همسان برای یک گروه ضبط به جای یک رشته خالی تعریف نشده است:
// Firefox 33 یا بالاتر "ایکس".جایگزین کردن(/x(.)?/g, (m,گروه) => کنسول.ورود به سیستم(`گروه: $json.در حال کار کردن(گروه)>`); >); // گروه: "" // Firefox 34 یا جدیدتر "ایکس".جایگزین کردن(/x(.)?/g, (m,گروه) => کنسول.ورود به سیستم(`گروه: گروه $>`); >); // گروه: تعریف نشده
توجه داشته باشید که به دلیل سازگاری در وب ، regexp. $ n همچنان به جای تعریف نشده ، رشته خالی را برمی گرداند (اشکال 1053944).
همچنین ببینید
- Polyfill بسیاری از ویژگی های مدرن regexp (dotall ، پرچم های چسبنده ، گروه های ضبط شده به نام و غیره) در Core-JS
- فصل عبارات منظم در راهنمای جاوا اسکریپت
- string. prototype. match ()
- string. prototype. replace ()
- string. prototype. split ()
با این صفحه مشکل محتوا پیدا کرده اید؟
- صفحه را در GitHub ویرایش کنید.
- گزارش محتوا را گزارش دهید.
- منبع را در GitHub مشاهده کنید.
این صفحه آخرین بار در تاریخ 26 فوریه 2023 توسط مشارکت کنندگان MDN اصلاح شد.
طرح شما برای اینترنت بهتر.
استراتژی برای تجارت گزینه های...
ما را در سایت استراتژی برای تجارت گزینه های دنبال می کنید
برچسب :
نویسنده : فریبا کامران
بازدید : 35
تاريخ : پنجشنبه
26 مرداد
1402 ساعت: 18:56