سؤال

في JavaScript:

"ab abc cab ab ab".replace(/\bab\b/g, "AB");

يعطيني بشكل صحيح:

"AB abc cab AB AB"

عندما أستخدم أحرف UTF-8 على الرغم من:

"αβ αβγ γαβ αβ αβ".replace(/\bαβ\b/g, "AB");

ال مشغل حدود الكلمة لا يبدو أنه يعمل:

"αβ αβγ γαβ αβ αβ"

هل هناك حل لهذا؟

هل كانت مفيدة؟

المحلول

لا يتطابق تأكيد الحدود فقط إذا لم يتم تسبق حرف كلمة أو يتبعه حرف آخر (لذا .\b. مساوي ل \W\w و \w\W). و \w يعرف ب [A-Za-z0-9_]. لذا \w لا يتطابق مع الشخصيات اليونانية. وبالتالي لا يمكنك استخدام \b لهذه الحالة.

ما يمكنك فعله بدلاً من ذلك هو استخدام هذا:

"αβ αβγ γαβ αβ αβ".replace(/(^|\s)αβ(?=\s|$)/g, "$1AB")

نصائح أخرى

ليس كل تطبيق JavaScript regexp لديه دعم لإعلان Unicode ، لذلك تحتاج إلى الهروب منه

"αβ αβγ γαβ αβ αβ".replace(/\u03b1\u03b2/g, "AB"); // "AB ABγ γAB AB AB"

لتخطيط الشخصيات التي يمكنك إلقاء نظرة عليها http://htmlhelp.com/reference/html40/entities/symbols.html

بالطبع ، هذا لا يساعد في مشكلة الحدود (كما هو موضح في إجابات أخرى) ولكن يجب على الأقل تمكينك من مطابقة الشخصيات بشكل صحيح

كنت بحاجة إلى شيء لأكون قابلاً للبرمجة والتعامل مع علامات الترقيم ، والأقواس ، إلخ.

http://jsfiddle.net/aqvyd/

var wordToReplace = '買い手',
    replacementWord = '[[BUYER]]',
    text = 'Mange 買い手 information. The selected Store and Classification will be the default on the สั่งซื้อ.'

function replaceWord(text, wordToReplace, replacementWord) {
    var re = new RegExp('(^|\\s|\\(|\'|"|,|;)' + wordToReplace + '($|\\s|\\)|\\.|\'|"|!|,|;|\\?)', 'gi');
    return text.replace(re, replacementWord);
}

لقد كتبت محررًا لموارد JavaScript ، ولهذا السبب وجدت هذه الصفحة وأجبت عليها أيضًا بدافع الضرورة لأنني لم أتمكن من العثور على إعادة تدوير حدود كلمة عملت بشكل جيد مع Unicode.

ليس كل تطبيقات regex المرتبطة بمحركات JavaScript ANICODE.

على سبيل المثال ، يقتصر microsofts jscript في IE على ANSI.

عندما تتعامل مع كلمات Unicode والكلمات الطبيعية ، ربما تريد أن تكون أكثر حذراً مع الحدود من مجرد استخدام \b. نرى هذا الجواب للحصول على التفاصيل والاتجاهات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top