Hardware FixRecommendedDevice not working? Your driver may be the problemCheck updates for common hardware issues.Fix DriversHalloween DealsAmazon USHalloween week deals: useful picks before month-endAmazon US: current deals, useful picks and tech finds.Check DealsWindows FixRecommendedWindows errors stealing your time? Find the fix fastScan stability, cleanup and performance issues.Fix Now×
FREEDOM251

Freedom251 › Blog › JavaScript

ביטויים רגולריים (RegEx): מדריך מלא, תחביר ודוגמאות מעשיות

By Freedom251 Team · · 2 min read

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

ביטוי רגולרי (Regular Expression או RegEx) הוא תבנית טקסטואלית לחיפוש, חילוץ, אימות, החלפה ופיצול של מחרוזות. לדוגמה, cat מוצא את הרצף בתוך טקסט, ואילו ^cat$ דורש שכל הקלט יהיה בדיוק cat. לפני שכותבים ביטוי צריך לבחור את מנוע ה-RegEx: JavaScript, Python, Java, PCRE2, RE2/Go ו-Rust regex חולקים תחביר בסיסי, אך אינם תומכים בדיוק באותן תכונות.

הקישורים הבאים הם התיעוד הקובע לכל מנוע: JavaScript, Python, Java, PCRE2, RE2 ו-Rust.

As an Amazon Associate I earn from qualifying purchases.

איך RegEx עובד?

המנוע מקבל טקסט ותבנית ומחזיר התאמות, קבוצות לכידה או ערך בוליאני. חיפוש מוצא קטע כלשהו; חילוץ מחזיר חלקים מסומנים; אימות בודק את כל השדה. ב-Python, למשל, search מחפש בכל המחרוזת, match מתחיל בתחילתה ו-fullmatch דורש התאמה מלאה.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

תחביר בסיסי

תווים מיוחדים

סימן משמעות
. כל תו, בדרך כלל ללא newline
^ תחילת קלט או שורה
$ סוף קלט או שורה
Escape או רצף מיוחד
| או
( ) קבוצה
[ ] מחלקת תווים
{ } כמות חזרות

כדי להתאים תו מיוחד מילולית משתמשים ב-escape: ., ?, +, (, [ ו-\. בשפות תכנות קיימת לעיתים שכבת escape נוספת. ב-Python עדיף מחרוזת גולמית: r"d+.d+"; ב-Java יש להכפיל את הקו הנטוי: "\d+\.\d+".

מחלקות וקיצורים

  • [abc] — תו אחד מבין האפשרויות.
  • [a-z], [A-Z], [0-9] — טווחים.
  • [^0-9] — כל תו שאינו ספרה; ^ הוא שלילה רק בתחילת המחלקה.
  • d, w, s — ספרה, תו־מילה ורווח לבן; המשמעות תלויה במנוע וב-Unicode.

ב-Python, d במחרוזת Unicode עשוי להתאים לספרות רבות מעבר ל-0–9; למספרי ASCII השתמשו ב-[0-9] או בדגל ASCII. פירוט התחביר נמצא ב-Cheat sheet של JavaScript וב-תיעוד Python.

כימות, חמדנות ועוגנים

ביטוי משמעות
? אפס או פעם אחת
* אפס פעמים או יותר
+ פעם אחת או יותר
{n} בדיוק n
{n,} לפחות n
{n,m} בין n ל-m

<.*> הוא כימות חמדני ועלול לבלוע כמה תגיות; <.*?> עצל ומנסה להתאים את הקטע הקצר ביותר. עצלות אינה ערובה לביצועים טובים. במנועים מסוימים קיימים גם a*+ וקבוצה אטומית (?>...); Python תומכת בהם מגרסה 3.11, וגם Java ו-PCRE2 תומכות בגרסאות דומות (Python, PCRE2).

^abc$ נראה כאימות מלא, אך multiline משנה את משמעות העוגנים, ו-$ עשוי להתאים לפני newline סופי. בדקו את ה-API; ב-Python קיימים גם A ו-z (האחרון נוסף ב-3.14), וב-Java קיימים A, Z, z ו-G. bcatb מחפש מילה שלמה, אך גבול מילה תלוי בהגדרת תו־מילה ואינו אוניברסלי בעברית או ב-CJK.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #2

קבוצות, לכידה ו-lookaround

קבוצות

(d{4})-(d{2})-(d{2}) לוכד שנה, חודש ויום. כשאין צורך בתוצאה השתמשו ב-(?:https?://). קבוצות בשם שונות בין שפות: JavaScript ו-Java משתמשות ב-(?<year>d{4}), Python ב-(?P<year>d{4}).

Backreferences

(["']).*?1 דורש שסוג המרכאות בסוף יהיה זהה לסוג שבתחילה. Backreferences אינן נתמכות ב-RE2 או ב-Rust regex.

Lookaround

  • d+(?=%) — מספר שלפני אחוז, בלי לכלול את הסימן.
  • ^(?!admin$).+ — כל ערך שאינו בדיוק admin.
  • (?<=$)d+ — מספר אחרי דולר.
  • (?<!-)d+ — מספר שאינו אחרי מקף (יש להסיר את תו האפס; הביטוי הנכון הוא (?<!-)d+).

Lookaround אינו צורך תווים. Lookbehind ב-Python חייב בדרך כלל אורך קבוע; RE2 ו-Rust אינם תומכים ב-lookaround.

Rank #3

דגלים (Flags)

ב-JavaScript, g מחזיר את כל ההתאמות, i מתעלם מרישיות, m מפעיל multiline, s מאפשר ל-. להתאים newline, u מפעיל Unicode, v מוסיף Unicode sets, y הוא sticky ו-d מחזיר אינדקסים. Python משתמשת בשמות כגון re.IGNORECASE, re.MULTILINE, re.DOTALL, re.VERBOSE ו-re.ASCII. האותיות אינן בעלות משמעות זהה בכל מנוע.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

תבניות שימושיות — עם גבולות ברורים

מטרה ביטוי מה הוא באמת בודק
מספר שלם ^[0-9]+$ ספרות ASCII בלבד
עשרוני פשוט ^[0-9]+(?:.[0-9]+)?$ 12 או 12.50; לא סימן, פסיק או מפרידי אלפים
מבנה תאריך ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ מבנה בלבד; גם 2026-99-99 עובר
טלפון מוגבל ^+?[0-9 ()-]{7,20}$ מבנה גס, לא קיום מספר; יש להגדיר מדינה
אימייל בסיסי ^[^s@]+@[^s@]+.[^s@]+$ מבנה סביר, לא אימות כתובת או תקן מלא
URL בסיסי https?://[^s]+ HTTP/HTTPS עד רווח; לא כל URL אפשרי
מילים שלמות b(error|warning|critical)b תלוי בהגדרת גבול מילה
רווחים כפולים [ t]{2,} החלפה ברווח יחיד
מספרים בטקסט -?[0-9]+(?:.[0-9]+)? לא פורמטים מקומיים או ספרות Unicode

להחלפת תאריך (?<year>[0-9]{4})-(?<month>[0-9]{2})-(?<day>[0-9]{2}), JavaScript משתמשת ב-$<day>/$<month>/$<year>, Python ב-g<day>/g<month>/g<year>, וב-Java לעיתים ב-$3/$2/$1. בדיקת תאריך קלנדרית, אימייל אמיתי או מספר טלפון דורשת קוד ושירות אימות נוספים.

שימוש בקוד

JavaScript

const re = /bd{4}-d{2}-d{2}b/g;
const text = "Dates: 2026-08-18 and 2026-12-31";
console.log(text.match(re));

שיטות מרכזיות: test, match, matchAll, replace, search ו-split. אפשר להשתמש בליטרל או ב-new RegExp(pattern, flags); בבנייה ממחרוזת יש לזכור escape כפול.

Python

import re
text = "Dates: 2026-08-18 and 2026-12-31"
pattern = re.compile(r"bd{4}-d{2}-d{2}b")
print(pattern.findall(text))

בנוסף קיימים re.finditer, re.sub ו-re.split. השתמשו ב-fullmatch לאימות במקום להסתמך תמיד על ^ ו-$.

Java, .NET, Go ו-Rust

Pattern pattern = Pattern.compile("\b\d{4}-\d{2}-\d{2}\b");
Matcher matcher = pattern.matcher(text);
while (matcher.find()) System.out.println(matcher.group());

ב-.NET משתמשים ב-Regex.IsMatch, Match, Matches ו-Replace; לקלט שאינו בשליטתכם הגדירו timeout לפי תיעוד ה-API (מדריך .NET). Go regexp מבוסס RE2, ו-Rust:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
use regex::Regex;
let re = Regex::new(r"bd{4}-d{2}-d{2}b").unwrap();
for mat in re.find_iter("2026-08-18") { println!("{}", mat.as_str()); }

Rust regex אינו תומך ב-lookaround וב-backreferences, אך מתעד גבולות ביצועים; גם מנועים ללא backtracking אינם חסינים לכל עומס.

איך בונים ביטוי בצורה שיטתית?

  1. נסחו את הדרישה במילים.
  2. כתבו את החלקים המילוליים, למשל מקפים.
  3. החליפו סוגי תווים במחלקות ובכימות: [0-9]{4}-[0-9]{2}-[0-9]{2}.
  4. הוסיפו גבולות רק אם מדובר באימות מלא.
  5. הוסיפו קבוצות לכידה רק לחילוץ, חלופה או כימות משותף.
  6. בחרו greedy או lazy לפי התוצאה הדרושה.
  7. בדקו חיוביים, שליליים, ריקים, ארוכים, Unicode ו-newline.
  8. הריצו את הביטוי ב-flavor האמיתי והוסיפו בדיקות יחידה.
  9. בדקו ביצועים על קלט ארוך או לא מהימן.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

הבדלים בין מנועי RegEx

תכונה JavaScript Python Java PCRE2 RE2/Go Rust regex
קבוצות לכידה כן כן כן כן כן כן
Lookahead כן כן כן כן לא לא
Lookbehind מודרני כן, לרוב קבוע כן כן לא לא
Backreferences כן כן כן כן לא לא
תכנון ללא backtracking לא בהכרח לא בהכרח לא בהכרח לא בהכרח כן כן, עם מגבלות מתועדות

זו טבלת התמצאות, לא הבטחת תאימות לכל גרסה. בדקו תמיד את תיעוד המנוע: MDN, Python, Java, PCRE2, RE2 ו-Rust.

Unicode, עברית ושפות טבעיות

d, w ו-b אינם הגדרות אוניברסליות. ניקוד ותווים משלבים, אימוג’י וגרפים מורכבים גורמים לכך שמספר code points אינו בהכרח מספר האותיות שהמשתמש רואה. החליטו אם אתם עובדים על bytes, code points, grapheme clusters והאם הטקסט מנורמל. Java מתעדת b{g} ו-X לגבולות grapheme (Java Pattern). הטווח [u0590-u05FF] הוא דוגמה מוגבלת בלבד ואינו כולל בהכרח כל סימן, ניקוד או תו משלב בעברית.

בדיקה וניפוי

Regex101 מציע בחירת flavor, הסבר, debugger, החלפה, בדיקות יחידה ויצירת קוד; בזמן הבדיקה ברירת המחדל הייתה PCRE2 (PHP). בחרו שם את המנוע שבו היישום באמת משתמש: הצלחה ב-PCRE2 אינה מוכיחה תאימות ל-JavaScript, Python או Go.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • הכינו מקרי הצלחה וכישלון, קלט ריק, ארוך וכמעט־תקין.
  • בדקו Unicode, newline, תווים מיוחדים וכמה התאמות באותו טקסט.
  • הריצו את אותן בדיקות בתוך הפרויקט עצמו.
  • השתמשו ב-debugger או בהדפסה של קבוצות כדי לאתר את החלק שנלכד.

ביצועים ואבטחה: ReDoS

במנועי backtracking, תבניות עם כימויים מקוננים או חלופות חופפות עלולות לגרום לזמן ריצה קיצוני. OWASP מתארת זאת כ-ReDoS: צריכת CPU חריגה שעלולה לעכב או להשבית שירות (OWASP). ^(a+)+$ היא דוגמה רעיונית לקלט בעייתי.

  • הגבילו את אורך הקלט והתבנית.
  • הימנעו מ-.* וכימויים חופפים כשאפשר; העדיפו מחלקות מדויקות.
  • הגדירו timeout ב-API המתאים ואל תאפשרו RegEx חופשי ללא sandbox.
  • בחרו RE2 או Rust regex כשנדרשות מגבלות ביצועים צפויות, תוך בדיקת העלות על קלטים גדולים.

מתי לא להשתמש ב-RegEx?

  • HTML/XML מקוננים או שבורים — השתמשו בפרסר.
  • JSON ונתונים מקוננים — השתמשו בפרסר ייעודי.
  • תאריכים, חשבונאות ומספרים מקומיים — השתמשו בספריות סמנטיות.
  • אימייל אמיתי — בדיקת מבנה ולאחריה אימות באמצעות הודעה.
  • שפה טבעית, גבולות מילים מורכבים או עברית עשירה — שקלו כלי Unicode או NLP.

סיכום מעשי

התחילו מדרישה מילולית, בנו את הביטוי בהדרגה, והבדילו תמיד בין חיפוש, חילוץ ואימות. בחרו flavor לפני העתקת תחביר, השתמשו ב-escape ובגבולות במקומות הנכונים, בדקו מקרי קצה ו-Unicode, והוסיפו הגנות ביצועים כאשר הקלט אינו מהימן. ביטוי קצר אינו בהכרח טוב יותר מביטוי קריא, תואם ובטוח.

Quick Recap

SaleBestseller No. 2
Mastering Regular Expressions, Second Edition
Mastering Regular Expressions, Second Edition
Used Book in Good Condition
$18.57
SaleBestseller No. 3
Oracle Regular Expressions Pocket Reference
Oracle Regular Expressions Pocket Reference
Used Book in Good Condition
$8.51

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

JavaScriptPythonReDoSregexUnicodeביטויים רגולריים

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Recommended PC Tool
Recommended PC Tool
PC Slower Than It Used to Be?Free scan - under a minute
Outdated Drivers Are Slowing You DownFree scan - exact matches

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.