ریجیکس میں مدد درکار

اردو ویکیپیڈیا کے خانہ ترمیم میں ایسا اختیار شامل کرنے کی کوشش ہے جس پر کلک کرتے ہیں غلط املا والے الفاظ درست ہو جائیں۔ ابتدائی اسکرپٹ اور مواد تیار ہے۔ البتہ دو مشکلیں پیش آرہی ہیں۔
1) پہلا مسئلہ:
کوڈ:
    ['ابتدائ', 'ابتدائی'],
کی وجہ سے اگر متن میں کسی نے ابتدائ لکھا ہو تو بٹن پر کلک کرتے ہیں وہ ابتدائیہو جاتا ہےلیکن اگر بٹن کو دوبارہ دبایا جائے تو وہ ابتدائیی ہو جاتا ہے۔ چنانچہ جتنی بار بٹن پر کلک کریں ایک ی کا اضافہ ہوتا چلا جاتا ہے۔ بالکل یہی صورت حال تنوین کے ساتھ ہے، اگر تقریبا کو تقریباً کرنے کی کوشش کریں تو پہلی مرتبہ میں بالکل درست لیکن اس کے بعد جتنی بار کلک کریں تو تنوین کا اضافہ ہوتا چلا جاتا ہے۔

2) دوسرا مسئلہ:
میری خواہش ہے کہ صرف ایسے الفاظ تبدیل ہوں جن کے بعد ایک عدد اسپیس ہو۔ مثلا ابھی یہ ہو رہا ہے کہ اگر ہم تہا کو درست کرنے کے لیے
کوڈ:
    ['تہا', 'تھا'],
استعمال کر رہے ہیں تو تہا کو درست کرنے کے ساتھ ساتھ یہ ریاستہائے متحدہ کو ریاستھائے متحدہ میں تبدیل کر دیتا ہے۔
امید ہے احباب کی مدد سے ان مشکلوں پر قابو پانا آسان ہو جائے گا۔

دوست ، ابن سعید ، اسد ، سید ذیشان
 
ریگیولر ایکسپریشنز میں لفظ کے دونوں جانب ورڈ باؤنڈری کا استعمال کریں، اس طرح مکمل لفظ کی صورت میں ہی ترمیم ہوگی۔ :) :) :)
 
ریگیولر ایکسپریشنز میں لفظ کے دونوں جانب ورڈ باؤنڈری کا استعمال کریں، اس طرح مکمل لفظ کی صورت میں ہی ترمیم ہوگی۔ :) :) :)
ویسے ہمیں ریجیکس کا تجربہ نہیں اس لیے آپ کوڈ بتا دیں تو بہتر ہوگا۔
اگر آپ
کوڈ:
    ['\bتہا\b', 'تھا'],
کی بات کر رہے ہیں تو یہ کام ہی نہیں کر رہا ہے۔
 

قیصرانی

لائبریرین
ایسا لگتا ہے کہ ہر بار جب آپ ابتدائ کو ابتدائی سے بدلتے ہیں تو اگلی مرتبہ وہ ابتدائی کا ابتدائ اٹھا کر اسے بدل دیتا ہے جس سے ایک اضافی ی لگ جاتی ہے۔ سعود بھائی کا مشورہ دیکھیے کہ پورے لفظ کو بدلے، نہ کہ لفظ میں موجود ابتدائ کو
 
اگر جاوا اسکرپٹ میں یونیکوڈ کیریکٹرس کے ساتھ ورڈ باؤنڈری کی شناخت کے مسائل ہیں تو ریپلیس والے فنکشن میں تھوڑی ترمیم کر کے پیٹرن کے پہلے اور بعد میں کئی ایسے کیریکٹرس ریکٹینگل بریکیٹ میں شامل کیے جا سکتے ہیں جو الفاظ کے پہلے یا بعد میں آ سکتے ہیں۔ :) :) :)
 
ایسا لگتا ہے کہ ہر بار جب آپ ابتدائ کو ابتدائی سے بدلتے ہیں تو اگلی مرتبہ وہ ابتدائی کا ابتدائ اٹھا کر اسے بدل دیتا ہے جس سے ایک اضافی ی لگ جاتی ہے۔ سعود بھائی کا مشورہ دیکھیے کہ پورے لفظ کو بدلے، نہ کہ لفظ میں موجود ابتدائ کو
اس مسئلہ کو ورڈ باؤنڈری لگا کر حل کرنے کی کوشش کی جیسا کہ سعود بھائی نے بھی کہا ہے۔ لیکن مسئلہ حل نہیں ہوا، ممکن ہے ریجیکس غلط ہو۔ سعود بھائی درست بتا سکیں گے۔
 
اگر جاوا اسکرپٹ میں یونیکوڈ کیریکٹرس کے ساتھ ورڈ باؤنڈری کی شناخت کے مسائل ہیں تو ریپلیس والے فنکشن میں تھوڑی ترمیم کر کے پیٹرن کے پہلے اور بعد میں کئی ایسے کیریکٹرس ریکٹینگل بریکیٹ میں شامل کیے جا سکتے ہیں جو الفاظ کے پہلے یا بعد میں آ سکتے ہیں۔ :) :) :)
لیکن مسئلہ یہ ہے کہ اسکرپٹ کسی اور نے لکھی ہے اور اس میں ہماری جانب سے تبدیلی ممکن نہیں۔ انہوں نے محض ریجیکس کے ذریعہ ریپلیس منٹس کی راہ کھلی رکھی ہے۔ اگر آپ عملاً کوئی ایک مثال دے سکیں تو مزید آسانی ہوگی۔:) :)
 
لیکن مسئلہ یہ ہے کہ اسکرپٹ کسی اور نے لکھی ہے اور اس میں ہماری جانب سے تبدیلی ممکن نہیں۔ انہوں نے محض ریجیکس کے ذریعہ ریپلیس منٹس کی راہ کھلی رکھی ہے۔ اگر آپ عملاً کوئی ایک مثال دے سکیں تو مزید آسانی ہوگی۔:) :)
ویسے ہمیں ریجیکس کا تجربہ نہیں اس لیے آپ کوڈ بتا دیں تو بہتر ہوگا۔
اگر آپ
کوڈ:
    ['\bتہا\b', 'تھا'],
کی بات کر رہے ہیں تو یہ کام ہی نہیں کر رہا ہے۔
آپ اسے یوں آزمائیں:
کوڈ:
    [/\bتہا\b/g, 'تھا'],
یا پھر یوں:
کوڈ:
    [/[^\s\d\.,?!:;-_'"]WORD[$\s\d\.,?!:;-_'"]/g, 'تھا'],
دوسری مثال میں ہم نے اردو کا کاما، فل اسٹاپ اور دیگر دائیں سے بائیں زبانوں والے علامات شامل نہیں کیے ہیں، وہ آپ کر سکتے ہیں، اگر یہ کام کرتا نظر آئے تو۔ :) :) :)
 
آپ اسے یوں آزمائیں:
کوڈ:
    [/\bتہا\b/g, 'تھا'],
یا پھر یوں:
کوڈ:
    [/[^\s\d\.,?!:;-_'"]WORD[$\s\d\.,?!:;-_'"]/g, 'تھا'],
دوسری مثال میں ہم نے اردو کا کاما، فل اسٹاپ اور دیگر دائیں سے بائیں زبانوں والے علامات شامل نہیں کیے ہیں، وہ آپ کر سکتے ہیں، اگر یہ کام کرتا نظر آئے تو۔ :) :) :)
افسوس کہ دونوں سے کام نہیں بنا۔ شاید /b یونیکوڈ حروف کے ساتھ کام نہیں کرتا۔ البتہ اس سے کام بن گیا:
کوڈ:
    [/(?:^|\\s)آزمایش/g, 'آزمائش'],

تاہم تنوین اور ی والا مسئلہ یعنی ابتدائ والا مسئلہ ہنوز برقرار ہے۔ اس کا کیا حل ہو سکتا ہے؟:) :)
 
البتہ اس سے کام بن گیا:
کوڈ:
    [/(?:^|\\s)آزمایش/g, 'آزمائش'],
لیکن ابھی معلوم ہوا کہ یہ محض ایک ہی غلطی کو تبدیل کر رہا ہے۔ مثلاً مضمون میں آزمایش ایک سے زیادہ بار موجود ہے تو محض پہلے آزمایش کو درست کر رہا ہے بقیہ نہیں ہو رہے ہیں۔
 
تاہم تنوین اور ی والا مسئلہ یعنی ابتدائ والا مسئلہ ہنوز برقرار ہے۔ اس کا کیا حل ہو سکتا ہے؟:) :)
اس مسئلہ کو درج ذیل طریقے سے حل کیا:
کوڈ:
    [/(?:|\\s)ابتدائ(?=[\s\d=|*#:،۔؛؟'"()!.,?!;-_])/g, 'ابتدائی'],
    [/(?:|\\s)تقریبا(?=[\s\d=|*#:،۔؛؟'"()!.,?!;-_])/g, 'تقریباً'],
 
ابن سعید بھائی، ایسا ریجیکس درکار ہے جو انگریزی ختمہ (.) اور وقفہ(,) دونوں کو ایسی جگہ تلاش کرے کہ اس سے قبل کوئی انگریزی لفظ یا عدد موجود نہ ہو اور پھر اسے اردو (۔،) سے تبدیل کردے۔ :) :)
ہم نے اسے استعمال کیا لیکن ناکام رہے:
کوڈ:
 [/[^a-zA-Z0-9]./g, '۔'],
 
یہ بات ذہن میں رکھیں کہ ریگ ایکس میں ڈاٹ ایک وائلڈ کارڈ کیریکٹر کے طور پر استعمال ہوتا ہے۔ اگر ڈاٹ سے مراد فقط ڈاٹ ہو تو اسے اسکیپ کرنا پڑتا ہے، یعنی اس سے پہلے بیک سلیش لگانا پڑتا ہے۔ فی الحال ہم کہیں باہر نکل رہے ہیں اس لیے اس سے زیادہ کچھ نہیں کر سکتے، واپس آ کر دیکھیں گے اس معاملے کو۔ :) :) :)
 
یہ بات ذہن میں رکھیں کہ ریگ ایکس میں ڈاٹ ایک وائلڈ کارڈ کیریکٹر کے طور پر استعمال ہوتا ہے۔ اگر ڈاٹ سے مراد فقط ڈاٹ ہو تو اسے اسکیپ کرنا پڑتا ہے، یعنی اس سے پہلے بیک سلیش لگانا پڑتا ہے۔ فی الحال ہم کہیں باہر نکل رہے ہیں اس لیے اس سے زیادہ کچھ نہیں کر سکتے، واپس آ کر دیکھیں گے اس معاملے کو۔ :) :) :)
چنانچہ ہم نے کچھ ایسا کر دیا
کوڈ:
 [/[^a-zA-Z0-9]\./g, '۔'],
اس سے یہ انگریزی ختمہ . اردو ‌‌۔ سے بدلنے لگا البتہ تبدیلی کے ساتھ اپنے پہلے والے حرف کو بھی حذف کر رہا ہے۔ مثلا تھا. کو تھ۔ کر رہا ہے۔ اسے کس طرح حل کیا جائے؟
 

زیک

مسافر
چنانچہ ہم نے کچھ ایسا کر دیا
کوڈ:
 [/[^a-zA-Z0-9]\./g, '۔'],
اس سے یہ انگریزی ختمہ . اردو ‌‌۔ سے بدلنے لگا البتہ تبدیلی کے ساتھ اپنے پہلے والے حرف کو بھی حذف کر رہا ہے۔ مثلا تھا. کو تھ۔ کر رہا ہے۔ اسے کس طرح حل کیا جائے؟
چونکہ آپ بریکٹس والے حرف کو واپس نہیں رکھ رہے
 
Top