ES2021 replaceAll

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

אנחנו כבר באמצע 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.

פוסטים נוספים שכדאי לקרוא

צילום מסך של סוואגר
יסודות בתכנות

openAPI

שימוש בתשתית הפופולרית למיפוי ותיעוד של API וגם הסבר בסיסי על מה זה API

פתרונות ומאמרים על פיתוח אינטרנט

נגישות טכנית – פודקאסט ומבוא

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

ESP32 מאפס לילדים

מדריך ל-ESP32 לילדים ולהורים מאפס

אחד הדברים הכי כיפיים בעולם הוא תכנות ותכנות בעולם האמיתי – המפעיל אורות, ציוד אלקטרוני ומכשירים הוא מלהיב ממש. המדריך מיועד להורים שרוצים ללמד את הילדים שלהם לתכנת.

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