אני רץ Toolz.dev ולבלות את רוב השבוע שלי ב - WordPress plugin code, Laravel APIs, ו - React front ends.Find and replace is the single edit I perform more than any other, and yet nine times out of ten I do not want the powerful version of it.I do not want a regular expression.I want to take a piece of text, say every occurance of a client's old product name, and swap it for the new one, dically, without a stray character in my search term compating something I never meant to touch.That is what the כלי מצא והחלפה עושה, והמדריך הזה עוסק מדוע הגרסה המילולית והמשעממת של מצא והחלף היא זו שאתה רוצה רוב הזמן.
TL;DR: כלי זה אכן מוצא ומחליף באופן מילולי מעל גוש טקסט מודבק מונח החיפוש תואם בדיוק כפי שהוקלד, כך שנקודה תואמת נקודה ושלט דולר תואם סימן דולר, ללא בריחה וללא התאמת יתר בשוגג. אתה יכול להוסיף מספר כללי חיפוש והחלפה ולהחיל אותם במעבר אחד, להגביל התאמות למילים שלמות ולהפעיל או לכבות את רגישות המקרה. הוא מדווח כמה תחליפים כל כלל עשה. הכל פועל בדפדפן שלך, כך ששום דבר שאתה מדביק לא מועלה. כאשר אתה באמת צריך תווים כלליים וקבוצות לכידה, מחליף regex הוא הכלי הנכון במקום זאת.
מה זה מילולי למצוא ולהחליף, ולמה "literal" משנה?
מצא והחלף היא הפעולה של איתור כל מופע של מחרוזת אחת והחלפתה באחרת לכל עורך יש את זה מה שמשתנה הוא איך הכלי מפרש את מונח החיפוש שלך, וכי בחירה עיצוב יחיד מחליט אם הכלי עוזר לך או בשקט הורס את הטקסט שלך.
ישנן שתי אסכולות תחליף לביטוי רגיל מתייחס למונח החיפוש שלך כתבנית, כאשר תווים מסוימים הם פקודות: נקודה פירושה "כל תו," כוכבית פירושה " חזור," סימן דולר פירושו " סוף שורה," וסוגריים, סוגריים ואחוריים נושאים כולם משמעות מיוחדת. תחליף מילולי מתייחס למונח החיפוש שלך כאל עצמו, תו לדמות, ללא משמעות מיוחדת לכלום.
לרוב, מילולי זה מה שאתה רוצה, והנה הסיבה הקונקרטית נניח שאתה רוצה להחליף את מחרוזת הגרסה 1.0.0 עם 2.0.0 בבלוק טקסט. בכלי regex, הנקודות הללו הן תווים כלליים, כך שגם החיפוש שלך תואם 1x0y0, 1a0b0, ומיתרים אחרים שמעולם לא התכוונת. תצטרך לברוח מהנקודות כמו 1\.0\.0 כדי להפוך את זה בטוח, ואם אתה שוכח, הכלי עושה משהו לא בסדר בעדינות ולא מזהיר אותך. בכלי מילולי, 1.0.0 אמצעים 1.0.0, הנקודות הן נקודות, ואין מה לברוח ואין מה לטעות אותו דבר נכון לגבי מחיר כמו $9.99, נתיב קובץ עם קו נטוי אחורי, או קטע קוד עם סוגריים בתוכו הכלי המילולי מטפל בכולם מבלי שתחשוב על תחביר דפוס, כי אין תחביר דפוס.
מתי עלי להשתמש במקום זאת בתחליף regex?
מילולית היא ברירת המחדל הנכונה, אבל היא לא התשובה הנכונה לכל דבר, ואני מעדיף לומר לך היכן היא עוצרת מאשר להעמיד פנים שלא. להגיע עבור א כלי החלפת REGEX כאשר הדבר שאתה מתאים הוא צורה ולא מחרוזת קבועה אם אתה צריך להתאים כל שנה בת ארבע ספרות, או כל כתובת דואל, או כל שורה שמתחילה ב-hash, או שאתה רוצה לעצב מחדש טקסט מותאם על ידי שליפת חלקים מתוך זה עם קבוצות לכידה, כלומר עבודת דפוס וכלי מילולי לא יכול לעשות זאת בודק regex האם המקום לבנות ולאפות באגים בתבנית הזו לפני שאתה מפעיל אותה.
הקו המפריד פשוט אם אתה יכול להקליד בדיוק את מה שאתה מחפש, השתמש מילולית מצא והחלף וחסוך לעצמך את הבריחה אם מה שאתה מחפש הוא קטגוריה של דברים שחולקים צורה אבל לא תווים מדויקים, השתמש ב regex רוב ניקוי הטקסט היומיומי הוא הסוג הראשון, וזו הסיבה שהכלי המילולי מכסה את רוב העבודות האמיתיות וכלי regex מכסה את השאר.
| מצב | להשתמש | למה |
|---|---|---|
| שנה שם של מילה או ביטוי קבועים | מצא והחלף מילולית | המונח מדויק; אין צורך בדפוס |
מונח חיפוש המכיל נקודות, חתכים או $ |
מצא והחלף מילולית | אין בריחה, אין התאמות תווים כלליים בשוגג |
| תקן מספר מונחים שונים במכה אחת | פשוטו כמשמעו למצוא ולהחליף, כללים מרובים | כל כלל מדויק ומיושם לפי הסדר |
| התאם בכל שנה, דואל או צורת קוד | החלפת Regex | רק דפוס יכול לתאר קטגוריה |
| סדר מחדש או עיצוב מחדש של טקסט מותאם | החלפת Regex | ללכוד קבוצות לשלוף ולסדר מחדש חתיכות |
| התאמה בהתחלות השורה או גבולות המילים לפי כלל | החלפת Regex | עוגנים וגבולות הם תכונות דפוס |
איך פועלים מספר כללים?
התכונה שאני נשען עליה הכי הרבה היא יישום של מספר כללים בבת אחת ניקוי אמיתי הוא לעתים רחוקות החלפה אחת כשאני משתלט על לקוח' עותק s, ייתכן שאצטרך לשנות שם מותג, לתקן שתי שגיאות כתיב עקביות ולהסיר חתיכת boilerplate, הכל באותו בלוק של טקסט. לעשות זאת מכיוון שארבעה מעברים נפרדים זה מייגע ונוטה לשגיאות הכלי מאפשר לך להוסיף שורה עבור כל זוג למצוא ולהחליף, והוא מיישם אותם לפי הסדר, כל כלל פועל על הפלט של זה שלפניו.
ששווה להבין את ההזמנה, כי זו תכונה, לא תאונה. say כלל אחד מחליף foo עם bar, וכלל שני מחליף bar עם baz. מכיוון שכלל שני פועל על התוצאה של כלל ראשון, טקסט שהתחיל כ foo מסתיים כ baz. רוב הזמן הכללים שלך עצמאיים והסדר לא משנה, אבל כשהם מקיימים אינטראקציה, ההתנהגות צפויה: מלמעלה למטה, כל אחד בתוצאה הקודמת. הכלי גם מראה לך ספירה עבור כל כלל, כך שתוכל לאשר שכלל שלוש תואם למשהו ואינו יושב שם ולא עושה כלום בגלל שגיאת הקלדה במונח החיפוש.
מה עושות אפשרויות של מילה שלמה ומקרה?
שתי אפשרויות מטפלות במקרים שבהם החלפה פשוטה בוטה מדי.
רגישות למקרה מחליטה אם Cat, CAT, ו cat האם אותה מילה או שלוש שונות. זה כבוי כברירת מחדל, כי רוב הניקיון רוצה לתפוס מונח ללא קשר לאופן שבו הוא היה באותיות רישיות. הפעל אותו כאשר האותיות הגדולות הן כל העניין: כאשר אתה רוצה לשנות איות אחד של שם מבלי לגעת באחר, או כאשר אתה עובד עם קוד איפה value ו Value הם מזהים שונים.
התאמת מילים שלמות מחליטה אם מונח החיפוש שלך צריך לעמוד בפני עצמו במקום לשבת בתוך מילה ארוכה יותר. זו האפשרות שחוסכת ממך את האסון הקלאסי של מצא והחלף אם תחליף cat עם dog בלי התאמה של מילה שלמה, אתה גם פונה category לתוך dogegory ו scatter לתוך sdogter. עם התאמת מילים שלמות, רק המילה העצמאית cat מוחלף והמילים הארוכות יותר נשארות לבד הכלי מזהה גבולות מילים באמצעות אותיות ומספרים של Unicode ולא בהגדרה של ASCII בלבד, אז מילה מודגשת כמו café מתייחסים אליו כאל מילה בודדת וגבולותיה נמצאים בצורה נכונה, אשר יישום נאיבי באמצעות הקלאסיקה \b גבול ישתבש.
יש כאן נקודה רחבה יותר לגבי האופן שבו כלי טקסט צריכים לכבד את Unicode, שאני נכנס אליה מדריך כלי טקסט: התייחסות לטקסט כאל בתים ולא כאל תווים הנתפסים על ידי המשתמש היא המקום שממנו מגיעים מספר מפתיע של באגי כלים.
איך אני משתמש בו בעבודה אמיתית
כמה דפוסים עולים שוב ושוב. כשאני מדביק טקסט מתוך PDF או אימייל, הוא מגיע לעתים קרובות עם מונח שנכתב בצורה לא עקבית, וכלל מילולי אחד מתקן כל מופע. כשאני מעביר לקוח 's תוכן, הגדרתי ערימה של כללים עבור שם המותג, הדומיין הישן וכמה ביטויים חוזרים, ומריץ את כולם בבת אחת. כשאני מנקה נתונים לפני ייבואם, אני משתמש בכללים כדי להסיר קידומת חוזרת או תו סמן תועה, ומחליף אותו בכלום, שהוא רק כלל עם תחליף ריק.
זה משתלב באופן טבעי עם כלי הטקסט האחרים. לעתים קרובות אני משטח טקסט מודבק עם הסר מעברי שורות ראשית, לאחר מכן הפעל מצא והחלף על התוצאה. כאשר העבודה היא באמת על שינוי צורת המילים במקום להחליף אותן, ה ממיר מארז האם ההתאמה הטובה יותר, וכשאני מבטל את השכפול של רשימה אני מגיע ל- מסיר קו כפול במקום זאת. לדעת איזה כלי מיועד לאיזו עבודה היא חצי מהמהירות, ויש סקירה רחבה יותר של זה ב- כלי פרודוקטיביות למפתחים מדריך.
הדבר האחרון, והסיבה שבניתי את אלה כדי לרוץ בדפדפן, היא פרטיות הטקסט שאתה מדביק בכלי למצוא ולהחליף הוא לעתים קרובות טיוטה, לקוח' עותק שלא פורסם, תמליל או נתונים שאין לך עסק להעלות לשרת אקראי כל מה שהכלי הזה עושה קורה ב-JavaScript במחשב שלך שום דבר לא מועבר, נרשם או מאוחסן, ואתה יכול לאשר זאת על ידי ניתוק מהרשת וצפייה בכלי ממשיך לעבוד.
דוגמה עובדת: שינוי שם של מוצר על פני דף
תן לי להפוך את הרעיון של כללים מרובים לקונקרטי, כי זה החלק שאנשים לא משתמשים בו. תגיד לקוח מיתוג מחדש מ-"QuickBooks Lite" ל-"Ledgerly," עבר מ oldsite.com ל ledgerly.app, והעותק הישן שלהם שמר על איות " דואר אלקטרוני" עם מקף בזמן שמדריך הסגנון החדש רוצה "email." כלומר שלושה שינויים עצמאיים, והייתי מגדיר אותם כשלושה כללים במעבר אחד ולא שלוש נסיעות דרך הכלי.
כלל אחד מוצא QuickBooks Lite ומחליף אותו ב Ledgerly. כלל שני ממצאים oldsite.com ומחליף אותו ב ledgerly.app; שימו לב שהנקודות בשני התחומים הן מילוליות כאן, אז אני לא צריך לברוח מכלום, בעוד שכלי regex יטפל oldsite.com כהתאמה oldsiteXcom כמו גם. כלל שלוש ממצא e-mail ומחליף אותו ב email. אני מדביק את הדף, מריץ את שלושתם, והספירה ליד כל כלל אומרת לי ששם המותג השתנה תשע פעמים, הדומיין השתנה ארבע פעמים ותיקון המקף פגע פעמיים. אם כלל שלוש הראה אפס, הייתי יודע שהעותק לא מכיל את האיות המקוף ויכולתי לבטל את הכלל.
הספירות הן הגיבור השקט של זרימת העבודה הזו בלעדיהם אתה סומך על כך שכל כלל עשה את עבודתו; איתם אתה מקבל משוב מיידי שמונח חיפוש היה נכון או לא נכון. אפס שבו ציפית להתאמות הוא כמעט תמיד שגיאת הקלדה בשדה מצא או אי התאמה של רישיות שאתה יכול לתקן על ידי החלפת רגישות למקרה.
איך ההתאמה עובדת?
כדאי לדעת קצת על מה שקורה מתחת למכסה המנוע, כי זה מסביר התנהגות כלשהי שאחרת אתה עלול למצוא מפתיעה הכלי סורק את הטקסט משמאל לימין בכל עמדה הוא בודק אם מונח החיפוש שלך תואם מתחיל שם אם כן, וכל תנאי של מילה שלמה מתקיים, הוא כותב את ההחלפה וקופץ מעבר לטקסט המותאם אם לא, הוא מעתיק תו אחד לרוחב וממשיך הלאה באחד זו הסיבה שההחלפה אינה רקורסיבית בתוך כלל אחד: כאשר הוא כותב את ההחלפה, הוא ממשיך לסרוק אחריו, לא בתוכו, אז החלפה aa עם a במחרוזת aaa נותן לך aa במקום להתמוטט כל הדרך עד a. אם אתה רוצה את הקריסה, אתה מפעיל את הכלל פעמיים, וזה בדיוק מה שעושה כלל שני עם אותו ממצא והחלפה.
התאמה חסרת רישיות נעשית תו אחר תו ולא על ידי כיסוי נמוך יותר של כל המחרוזת תחילה. זה נשמע כמו פרט יישום, אבל זה משנה לנכונות: תווים מסוימים משנים אורך כשהם בעלי מעטפת נמוכה יותר, והשוואת מחרוזות שלמות עם מעטפת נמוכה יותר תוציא את המיקומים מהיישור ותשחית את הפלט. השוואת תו אחד בכל פעם שומרת על כל אינדקס כנה. גבולות של מילים שלמות נבדקים מול התווים מיד לפני ואחרי התאמה, תוך התייחסות לכל אות או מספר Unicode כחלק ממילה, וזה מה שמאפשר לסקריפטים מודגשים ולא לטיניים להתנהג כמו שהיית מצפה.
כל זה לא משהו שאתה צריך לחשוב עליו בשימוש יומיומי. אבל זה ההבדל בין כלי שעושה בשקט את הדבר הלא נכון במארז קצה לבין כלי שאתה יכול לסמוך עליו עם לקוח' עותק s, וזו הסיבה שאני מעדיף להשתמש בתחליף מילולי ייעודי מאשר להדביק טקסט בתיבה regex ולקוות שמונח החיפוש שלי לא הכיל תו מיוחד.
שאלות נפוצות
כיצד אוכל למצוא ולהחליף טקסט מבלי להשתמש ב-regex?
הדבק את הטקסט שלך לתוך הכלי, הקלד את הביטוי המדויק למצוא ואת הביטוי המדויק להחליף אותו, ולהפעיל אותו החיפוש הוא מילולי, כך כל תו שאתה מקליד מותאם כמו עצמו ושום דבר לא צריך לברוח כל התרחשות מוחלפת ואתה מקבל ספירה של כמה שינויים בוצעו, הכל בדפדפן שלך מבלי שום דבר שהועלה.
האם אני יכול להחליף כמה מילים שונות בו זמנית?
כן. הוסף שורה עבור כל זוג מצא והחלף והכלי מחיל אותם ברצף, כל אחד פועל על התוצאה של הכלל שלפניו. כך תשנה שם של מותג, תתקן שני שגיאות כתיב ותפשיט חתיכת לוחית במעבר אחד, וכל כלל מציג את ספירת ההחלפה שלו כדי שתוכל לראות שהוא תואם.
מה ההבדל בין זה לבין כלי החלפת regex?
כלי זה מתאים למילת החיפוש שלך באופן מילולי, כך שנקודה מתאימה רק לנקודה וסימן דולר רק לסימן דולר, ללא תחביר דפוס ללמידה וללא התאמת יתר בשוגג. regex replace tool מתייחס למונח החיפוש כתבנית עם תווים כלליים, עוגנים וקבוצות לכידה, וזה מה שאתה צריך כדי להתאים לקטגוריה של דברים כגון כל שנה או כל כתובת דואל. השתמש מילולית כאשר אתה יכול להקליד את הדבר המדויק שאתה רוצה; השתמש ב-regex כאשר אתה תואם צורה.
כיצד התאמת מילים שלמות עוצרת החלפות לא רצויות?
עם התאמת מילים שלמות, מונח החיפוש מוחלף רק כאשר הוא עומד בפני עצמו ולא בתוך מילה ארוכה יותר. הַחלָפָה cat ואז משתנה cat אבל עוזב category, scatter, ו located ללא נגיעה הכלי משתמש בגבולות המודעים ל-Unicode, כך שמילים מודגשות ולא באנגלית מטופלות בצורה נכונה במקום להיות מפוצלות במקום הלא נכון.
האם למצוא ולהחליף לשנות את מעברי הקו או המרווח שלי?
מס 'רק התווים שחיפשת משתנים מעברי שורות, הזחה, מרווח, וסימני פיסוק סביב ההתאמות שלך נותרו בדיוק כפי שהיו אם ההחלפה ארוכה או קצרה יותר מהמקור, הטקסט שמסביב משתנה באופן טבעי, אבל שום דבר אחר אינו מעוצב מחדש או זורם מחדש.
האם יש גבול לכמה טקסט אני יכול לעבד?
אין מגבלה קבועה מעבר לדפדפן 's זיכרון. מכיוון שהעבודה מתרחשת במכשיר שלך ולא בשרת, בלוקים של מאות אלפי תווים מעבדים כמעט באופן מיידי ואין מכסה גודל העלאה. למשהו בגודל של ספר שלם אתה עשוי להבחין בהפסקה קצרה, אבל מסמכים רגילים הם למעשה מיידיים.
האם הטקסט שלי מועלה או מאוחסן בכל מקום?
מס 'הטקסט מעובד על ידי JavaScript בדפדפן שלך והוא אף פעם לא מועבר, נרשם, או מאוחסן אתה יכול לאמת זאת על ידי פתיחת הכרטיסייה רשת בזמן שאתה מפעיל תחליף, או על ידי ניתוק מהאינטרנט, מאז הכלי ממשיך לעבוד במצב לא מקוון ברגע הדף נטען זו הסיבה להשתמש בכלי בצד הלקוח עבור טיוטות, עותק לקוח, וכל דבר פרטי.



