ورود

View Full Version : آموزش: عبارات با قاعده RegExp در ActionScript3



BOB
جمعه 17 آبان 1392, 10:48 صبح
یکی از قدرتمندترین قابلیت‌های اضافه شده به ActionScript 3، عبارات با قاعده بوده که از طریق کلاس RegExp قابل دسترس هستند. ساده‌ترین تعریفی که از عبارات با قاعده می‌توان ارائه نمود این است که این عبارات، الگوهایی برای تطبیق و جستجو در رشته‌ها هستند. با استفاده از عبارات با قاعده امکان تعریف الگوهای متعدد و پیچیده‌ای برای جستجوی اعداد، کاراکترها، علائم و غیره در رشته فراهم می‌گردد.

از جمله کاربردهای این عبارات می‌توان به موارد زیر اشاره نمود:

جستجوی زیر رشته‌هایی که با کلمه خاصی شروع شده و یا با آن تمام می‌شوند.
جستجوی کلماتی که دارای کاراکتر خاصی هستند.
استخراج مقادیر خاصی مانند مقدار زمان، تاریخ، شماره تلفن و غیره از یک رشته.
بررسی صحت یک رشته دریافت شده از کاربر مانند آدرس ایمیل یا آدرس یک وب سایت.
استخراج تگهای HTML از میان رشته‌ها.


الگوهای عبارت با قاعده با ترکیب کاراکترهای خاصی که دارای معانی مختلفی هستند ساخته می‌شوند. برای تعریف عبارات با قاعده از الگوی زیر استفاده می‌شود:

var نام متغیر : RegExp = new RegExp("رشته");
var نام متغیر : RegExp = /عبارات با قاعده /;

در روش اول با استفاده از متد سازنده کلاس RegExp و new که برای ساخت شئ جدید مورد استفاده قرار می‌گیرد، متن عبارت با قاعده انتصاب داده شده است. اما در روش دوم از انتصاب مستقیم عبارت با قاعده که با استفاده از دو کاراکتر “/” مشخص می‌گردد استفاده شده است. در زبان ActionScript 3، برای مشخص کردن یک عبارت با قاعده، مستقیماً می‌توان آن را در بین دو کاراکتر / تایپ نمود.


مثال: الگوی جستجو به دنبال کلمه hello

var R1:RegExp = /hello/;
var R2:RegExp = new RegExp("hello");


مثال: الگوی جستجو به دنبال یک عدد تک رقمی

var R1 : RegExp = new RegExp("\\d") ;
var R2 : RegExp = /\d/ ;


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


هم اکنون با ذکر چند مثال به بررسی کاربرد الگوهای عبارات با قاعد می‌پردازیم:


مثال 1: بررسی وجود کلماتی مثل test-1 ، Test-2، TEst-3 و غیره:

var R1: RegExp = /test-\d/i;
var R2: RegExp = new RegExp("test-\\d", "i");


مثال 2: تشخیص کلمة the در یک جمله و بدون حساسیت به حروف بزرگ و کوچک:

var R: RegExp = /the/i ;


مثال 3: تشخیص تمام عباراتی که در بین گیومه آمده‌اند و استفاده از حالت پیشرفته عبارات با قاعده که اجازة فاصله‌گذاری در بین کاراکترهای عبارت با قاعده را فراهم می‌نماید:

var R: RegExp = /"[^"]*"/x;


مثال 4: تشخیص آدرس‌های ایمیل که به com یا org ختم می‌شوند.

var R: RegExp = /\w*@\w*\.[org | com]/gxi;


مثال 5: تشخیص هر دو کلمه‌ای که بین آنها خط فاصله باشد.

var R:RegExp = /(\w+) \- (\w+)/x;


مثال 6: تشخیص تمام کلماتی که با حروف a تا z یا A تا Z شروع شده و به اعداد ختم می‌شوند:

var R:RegExp = /[a-zA-Z]+\d+/g ;

پس از تعریف یک عبارت با قاعده برای بررسی الگوی آن بر روی یک رشته، از دستورات test و exec در کلاس RegExp استفاده می‌شود.
دستور test با بازگرداندن یک مقدار Boolean، تطبیق الگوی مورد نظر را بر روی رشته بررسی می‌نماید. در صورتی که رشته با الگو تطابق داشته باشد، مقدار خروجی true و در غیر این صورت false بازگردانده می‌شود.
دستور exec علاوه بر آن زیر رشته تطبیق داده شده و مکان شروع آن در رشتة اصلی را نیز باز می‌گرداند. به عبارتی خروجی دستور exec آرایه‌ای از زیر رشتة تطبیق داده شده و مکان شروع آن در رشته اصلی می‌باشد.

مثال:
var R:RegExp = /abc/i;
trace(R.test("abcdef")); // Output: True
trace(R.test("Test of ABC")); // Output: True
trace(R.test("AbC")); // Output: True


مثال:
var R: RegExp = /abc/ ;
var result: Array = R.exec("A Test of abc chars") ;

trace (result.index) ; // Output: 10
trace (result.input) ; // Output: A Test of abc chars
trace (result) ; // Output: abc


پس از اجرای دستور فوق، آرایه خروجی دارای سه خصیصه جدید index، input و عنصر آرایه خواهد بود.

- خصیصه index : مشخص کننده اندیس شروع زیر رشتة پیدا شده در رشتة اصلی.
- خصیصه input : مشخص کننده متن رشتة اصلی.
- عنصر آرایه : متن زیر رشته پیدا شده.

در صورتی که در عبارات با قاعده از گروه بندی استفاده نشده باشد، خروجی دستور exec همیشه یک آرایه تک عضوی شامل زیر رشتة پیدا شده خواهد بود. ما در صورت استفاده از کاراکترهای گروه بندی، می‌توان خروجی دستور exec را به چند زیر رشته مختلف تقسیم نمود.

مثال:

var R: RegExp = /(\d+)[a-z]+(\d+)/;
var result : Array = R.exec("7abc123");

trace(result.length) ; // Output: 3
trace(result [0] ); // Output: 7abc123
trace(result [1] ); // Output: 7
trace(result [2] ); // Output: 123

برای اینکه عمل جستجوی الگو در تمام رشتة ورودی ادامه پیدا کرده و زیر رشته‌های دیگری نیز پیدا شوند، می‌بایست دستور exec به تعداد دفعات مورد نیاز فراخوانی گردد. به این منظور و برای مشخص شدن تعداد دفعات مورد نیاز برای اجرای دستور exec، باید فراخوانی آن را تا زمانی که مقدار خروجی آن null شود ادامه داد

مثال: پیدا کردن تمام کلمات 3 حرفی در یک جمله:

var pattern:RegExp = /\b\w{3}\b/g;
var target:String = "This String has Two 3 letter Words.";
var result:Array;