אינטרנט ישראל
  • ראשי
  • אודות רן בר-זיק ואינטרנט ישראל
  • ערוץ טלגרם
  • מסטודון
  • התחברו אלי בטוויטר
  • התחברו אלי בלינקדאין
  • ספר ג'אווהסקריפט
  • ראשי
  • אודות רן בר-זיק ואינטרנט ישראל
  • ערוץ טלגרם
  • מסטודון
  • התחברו אלי בטוויטר
  • התחברו אלי בלינקדאין
  • ספר ג'אווהסקריפט
ראשי » מדריכים » ES20XX » ES2021 replaceAll

ES2021 replaceAll

רן בר-זיק אוגוסט 2, 2020 7:07 am 5 תגובות

פקודה חדשה להחלפת טקסט כללית במחרוזת טקסט בתקן ES2021 של ג'אווהסקריפט.

»promise.allSettled ב-ES2020
»Promise.any
כדאי תמיד להשאר מעודכנים! אם יש לכם טלגרם, בדקו את ערוץ הטלגרם של האתר שבו אני מעדכן על פוסטים חדשים 🙂 אם אתם רוצים ללמוד תכנות באופן מקיף ומסודר, הצטרפו לאלפי הלומדים בפרויקט "ללמוד ג'אווהסקריפט בעברית" שמלמד לתכנת בג'אווהסקריפט, ב-Node.js ובריאקט וגם מלמד על תרומה לקוד פתוח. גם ספרים דיגיטליים וגם ספרים מודפסים. בשיתוף הקריה האקדמית אונו ובתמיכת חברות מובילות כגון Wix, Outbrain, Elementor, Iron Source, Chegg, Really Good ועוד.

אנחנו כבר באמצע 2020 והפיצ'ר החדש של תקן ג'אווהסקריפט ES2021 כבר התקבל ובדרכו לכרום (בפיירפוקס הוא כבר נמצא). הפיצ'ר הוא פקודה קטנה שהיתה צריכה כבר להיות בג'אווהסקריפט ממזמן – פקודת replaceAll. הפקודה הזו מבצעת חיפוש והחלפה במחרוזות טקסט, אבל על כל הפעמים.

replace

אני מאמין שאין מתכנת ג'אווהסקריפט אחד שלא מכיר את replace. בגדול, היא נראית כך:

const someString = 'My name is Moshe';

const oldName = 'Moshe';

const newName = 'Yaakov';

const newStr = someString.replace(oldName, newName);

console.log(newStr); // "My name is Yaakov"

אין פה מה להסביר יותר מדי, replace היא מתודה שקיימת בכל מחרוזת טקסט ואפשר להחליף אותה כאשר היא מקבלת שני ארגומנטים. הראשון הוא הטקסט שאותו אנו רוצים להחליף והשני הוא הטקסט שנכנס במקומו (זה יכול להיות טקסט ריק ואז יש לנו מחיקה).

אבל מה הבעיה? הבעיה היא שאם אנחנו רוצים לבצע כמה החלפות, זה לא יעבוד 🙁 הנה דוגמה:

const someString = 'My name is Moshe, I love the name Moshe';

const oldName = 'Moshe';

const newName = 'Yaakov';

const newStr = someString.replace(oldName, newName);

console.log(newStr); // "My name is Yaakov, I love the name Moshe"

כלומר replace מבצע החלפה פעם אחת. אם היינו רוצים שפשוט הכל יוחלף בטקסט, הכל כולל הכל, היינו צריכים להשתמש בחיפוש ביטוי רגולרי עם פלאג גלובלי. וזה קצת מבאס:

const someString = 'My name is Moshe, I love the name Moshe';

const oldName = /Moshe/g;

const newName = 'Yaakov';

const newStr = someString.replace(oldName, newName);

console.log(newStr); // "My name is Yaakov, I love the name Yaakov"

למה זה מבאס? כי בדוגמאות hello world כאלו זה הכי קל בעולם. אבל מה קורה אם יש לי טקסטים שאני רוצה להחליף ויש בהם סימנים מיוחדים כמו ?.+\ ? אני צריך לעשות להם escaping כדי שייכנסו לביטוי הרגולרי והעניינים מסתבכים. למה אין פקודה מסודרת שאני יכול להכניס לתוכה מחרוזת טקסט וזהו?

בסטנדרט החדש ES2021 אנו מקבלים את פקודת replaceAll שאפשר להשתמש בה בקלות עם מחרוזות טקסט בלי שום ביטויים רגולריים:

const someString = 'My name is Moshe, I love the name Moshe';

const oldName = 'Moshe';

const newName = 'Yaakov';

const newStr = someString.replaceAll(oldName, newName);

console.log(newStr); // "My name is Yaakov, I love the name Yaakov"

אפשר להשתמש (כמו ב-replace) בפונקציה שמחזירה טקסט כדי שתקבע מה הטקסט המוחזר יהיה.

const someString = 'My name is Moshe, I love the name Moshe';

const oldName = 'Moshe';

const newStr = someString.replaceAll(oldName, () => 'Yaakov');

console.log(newStr); // "My name is Yaakov, I love the name Yaakov"

הפונקציה הזו, אם אתם לא מכירים אותה, היא פונקצית חץ. חלק מ-ES6 .

ב-caniuse מבשרים ש-replaceAll עובדת בפיירפוקס ובכרום החל מגרסה 85.

כדאי תמיד להשאר מעודכנים! אם יש לכם טלגרם, בדקו את ערוץ הטלגרם של האתר שבו אני מעדכן על פוסטים חדשים 🙂 אם אתם רוצים ללמוד תכנות באופן מקיף ומסודר, הצטרפו לאלפי הלומדים בפרויקט "ללמוד ג'אווהסקריפט בעברית" שמלמד לתכנת בג'אווהסקריפט, ב-Node.js ובריאקט וגם מלמד על תרומה לקוד פתוח. גם ספרים דיגיטליים וגם ספרים מודפסים. בשיתוף הקריה האקדמית אונו ובתמיכת חברות מובילות כגון Wix, Outbrain, Elementor, Iron Source, Chegg, Really Good ועוד.
es2021

5 תגובות

  1. חזי הגב אוגוסט 2, 2020 בשעה 9:54 am

    ב web assembly זה לא היה קורה…

  2. אסף הגב אוגוסט 2, 2020 בשעה 6:18 pm

    עובד בnode?

  3. דוד הגב אוגוסט 2, 2020 בשעה 6:31 pm

    אני תרח זקן, קורא ביטויים רגולריים לארוחת בוקר 🙂 גם פונקציה משלך של replace all (רמז: פונקצית חץ ורקורסיה) לא מסובך לכתוב. נראה לי שאתה קצת מפונק, בקטע טוב

  4. חיים רפאל הגב אוגוסט 3, 2020 בשעה 8:37 am

    גם אני מת על ביטויים רגולריים, אבל replaceAll היא פונקציה שיש בכל שפה נורמלית, escaping זה לא כיף ומועד לחורי אבטחה, ולמרות שאתה צודק שקל לכתוב אחת כזו (ויש מיליון ואחת מודולים כאלה בNPM) – היא תהיה איטית יותר (טוב, נו), ובכלל אנחנו כבר כמה שנים בקטע של ליצור ספרייה סטנדרטית לJS כמו כל שפה נורמלית במקום מודול לכל דבר בNPM (ע"ע string padding, number formats…)

  5. יוסף בוסקילה הגב אוגוסט 9, 2020 בשעה 12:54 am

    אני הייתי מישתמש ב
    'str'.split('moahe').join('yakov')
    בהחלט חידוש מרענן

השארת תגובה

ביטול

ללמוד ג'אווהסקריפט בעברית

ללמוד לתכנת ג'אווהסקריפט בעברית שגייס יותר משלוש מאות אלף שקל ולמעלה מ-2000 תומכים - בואו ללמוד עכשיו איך לתכנת.

רשימת הנושאים
  • מדריכים
    • ריאקט
    • טייפסקריפט
    • ECMAScript 6
    • ES20XX
    • Node.js
    • Express
    • רספברי פיי
    • Babel
    • docker
    • MongoDB
    • Git
    • לימוד MySQL
    • SASS
    • jQuery
    • CSS3
    • HTML 5
    • SVN
    • LESS
  • פיתוח אינטרנט
    • פתרונות ומאמרים על פיתוח אינטרנט
    • jQuery Scripts
    • jQuery למתקדמים
    • יסודות בתכנות
    • נגישות אינטרנט
  • חדשות אינטרנט
  • מידע כללי על אינטרנט
    • רשת האינטרנט
    • בניית אתרי אינטרנט
  • rss logo

    לכל המאמרים

    לכל המאמרים שפורסמו באינטרנט ישראל משנת 2008 ועד עכשיו.
  • rss logo

    RSS Feed

    משתמשים בקורא RSS? אם כן, עקבו אחרי אינטרנט ישראל באמצעות פיד ה-RSS!
    מה זה RSS?
  • Twitter logo

    עקבו אחרי בטוויטר

    בחשבון הטוויטר שלי אני מפרסם עדכונים מהירים על חדשות בתחום התכנות והיזמות, התרעות על מצבי חירום ורכילות בוערת על תחום הווב.
    מה זה טוויטר?
  • facebook like image

    ערוץ הטלגרם של אינטרנט ישראל

    בערוץ הטלגרם של אינטרנט ישראל אני מפרסם את הפוסטים של באתר וכן עדכונים טכנולוגיים נוספים.
    מה זה טלגרם?
  • github logo

    הפרויקטים שלי בגיטהאב

    הפרויקטים שאני כותב ושוחררו לציבור ברישיון קוד פתוח נמצאים ברובם בגיטהאב.
חיפוש

כל הזכויות שמורות לרן בר-זיק ולאינטרנט ישראל | מדיניות הפרטיות של אתר אינטרנט ישראל | אתר אינטרנט ישראל נגיש לפי תקן WCAG 2.0 AA | הצהרת הנגישות של האתר | אבטחת מידע ודיווח על בעיית אבטחת מידע

גלילה לראש העמוד