تقنية

كيفية العثور على النص واستبداله في مستندات Google بأنماط البحث regex


من السهل البحث واستبدال النص في مستندات Google بـ DocumentApp خدمة البرنامج النصي لتطبيقات Google. يمكنك الاستخدام findText الطريقة مع تعبيرات منتظمة بسيطة للعثور على عناصر نصية في المستند الذي يتطابق مع نمط واستبدالها بالنص المحدد.

إليك عينة رمز بسيطة تحل محل الحدوث الأول لـ “GSUITE” مع “مساحة عمل Google” في مستند Google النشط.

const searchAndReplaceInGoogleDocs = () => {
  const searchText = 'GSuite';
  const replaceText = 'Google Workspace';

  const document = DocumentApp.getActiveDocument();
  const documentBody = document.getBody();

  const searchResult = documentBody.findText(searchText);

  if (searchResult !== null) {
    const startIndex = searchResult.getStartOffset();
    const endIndex = searchResult.getEndOffsetInclusive();
    const textElement = searchResult.getElement().asText();
    textElement.deleteText(startIndex, endIndex);
    textElement.insertText(startIndex, replaceText);
  }

  document.saveAndClose();
};

كل شيء جيد وجيد ولكن في بعض الحالات ، قد يفشل هذا البحث والاستبدال البسيط إذا لم يتحول نص البحث إلى تعبير منتظم صالح.

على سبيل المثال ، إذا كان لديك كتلة نصية مثل Hello (World في المستند (لاحظ القوس المفتوح الإضافي) الذي ترغب في استبداله بـ Hello World، سوف تفشل المقتطف أعلاه برسالة خطأ تقول Exception: Invalid regular expression pattern.

للتغلب على المشكلة ، من الجيد استبدال جميع الشخصيات الخاصة في نمط البحث والتي لها معنى خاص في عالم Regex. وتشمل هذه الشخصيات مثل الواصلة أو الأقواس أو علامات الاستفهام أو الرمز Plus.

سيصبح بحثنا المعدل والاستبدال: بعد ذلك:

const escapeRegex = (str) => str.replace(/[-[\]/{}()*+?.\\^$|#]/g, '\\$&');

const searchAndReplaceInGoogleDocs = () => {
  const searchText = 'Hello (World';
  const replaceText = 'Hello World';

  const document = DocumentApp.getActiveDocument();
  const documentBody = document.getBody();

  const searchResult = documentBody.findText(escapeRegex(searchText));

  if (searchResult !== null) {
    const startIndex = searchResult.getStartOffset();
    const endIndex = searchResult.getEndOffsetInclusive();
    const textElement = searchResult.getElement().asText();
    textElement.deleteText(startIndex, endIndex);
    textElement.insertText(startIndex, replaceText);
  }

  document.saveAndClose();
};



Source link

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى