8.1 Οι κανονικές εκφράσεις (regular expressions) στη JavaScript

Οι κανονικές εκφράσεις (regular expressions) στη JavaScript είναι ένα ισχυρό εργαλείο για την αναζήτηση και την επεξεργασία κειμένου. Μια κανονική έκφραση είναι ένα μοτίβο που χρησιμοποιείται για τον έλεγχο συμφωνιών με συγκεκριμένα πρότυπα σε κείμενο.

Οι κανονικές εκφράσεις διαθέτουν μια σειρά από σύμβολα και χαρακτήρες που συνθέτουν ένα μοτίβο. Αυτά τα μοτίβα μπορούν να χρησιμοποιηθούν για να αναζητήσουν, αντικαταστήσουν ή επεξεργαστούν κείμενο.

Οι βασικές λειτουργίες που μπορείτε να εκτελέσετε με τις κανονικές εκφράσεις στη JavaScript περιλαμβάνουν:

  1. Αναζήτηση: Μπορείτε να βρείτε την πρώτη εμφάνιση ενός μοτίβου σε ένα κείμενο.
  2. Αντικατάσταση: Μπορείτε να αντικαταστήσετε μια εμφάνιση ενός μοτίβου με κάτι άλλο.
  3. Εξαγωγή: Μπορείτε να εξάγετε τιμές που ταιριάζουν με ένα μοτίβο από το κείμενο.
  4. Διαχωρισμός: Μπορείτε να διαχωρίσετε το κείμενο σε τμήματα με βάση το μοτίβο.

Για παράδειγμα, αν θέλετε να βρείτε όλες τις λέξεις που αρχίζουν με “α” από ένα κείμενο, μπορείτε να χρησιμοποιήσετε την κανονική έκφραση /α\w+/g.

Οι κανονικές εκφράσεις στη JavaScript δηλώνονται με τη χρήση των συμβόλων / (κάθετος) για να ξεκινήσετε και να τερματίσετε την έκφραση, παραδείγματος χάριν /pattern/. Μερικά από τα βασικά σύμβολα που μπορείτε να χρησιμοποιήσετε στις κανονικές εκφράσεις περιλαμβάνουν:

  • .: Ταιριάζει με οποιονδήποτε χαρακτήρα εκτός από τον χαρακτήρα νέας γραμμής.
  • \d: Ταιριάζει με έναν ψηφίο.
  • \w: Ταιριάζει με έναν χαρακτήρα γράμματος ή αριθμού.
  • *: Ταιριάζει με το προηγούμενο στοιχείο 0 ή περισσότερες φορές.

Αυτό είναι ένα βασικό εισαγωγικό παράδειγμα των κανονικών εκφράσεων στη JavaScript. Είναι ένα πολύ βαθύ πεδίο και υπάρχουν πολλά περισσότερα πράγματα που μπορείτε να κάνετε με αυτές.

[adinserter block=”2″]

Η σύνταξη των κανονικών εκφράσεων στη JavaScript βασίζεται σε έναν συνδυασμό χαρακτήρων και συμβόλων που δημιουργούν ένα μοτίβο για την αναζήτηση ή τον έλεγχο συμφωνιών σε κείμενο. Ορισμένα βασικά στοιχεία της σύνταξης των κανονικών εκφράσεων περιλαμβάνουν:

  1. Χαρακτήρες Ταιριασμάτων: Οι κανονικές εκφράσεις χρησιμοποιούν χαρακτήρες για να ταιριάξουν με συγκεκριμένα κείμενα. Για παράδειγμα, ο χαρακτήρας a θα ταιριάξει με το γράμμα “a” σε ένα κείμενο.
  2. Συμβόλα Κανονικών Εκφράσεων: Ορισμένα συμβόλα χρησιμοποιούνται για να προσδιορίσουν συγκεκριμένες λειτουργίες. Για παράδειγμα, το . ταιριάζει με οποιονδήποτε χαρακτήρα, ενώ το \d ταιριάζει με έναν αριθμό.
  3. Κανονικές Έκφρασεις Ποσότητας: Μπορείτε να προσδιορίσετε τον αριθμό των φορών που ένα στοιχείο εμφανίζεται χρησιμοποιώντας σύμβολα όπως *, +, ? και {}. Για παράδειγμα, a* ταιριάζει με μια ακολουθία από μηδενικά ή περισσότερα “a”.
  4. Ομάδες και Υποομάδες: Μπορείτε να ορίσετε ομάδες στις κανονικές εκφράσεις για να ταιριάξετε με μια συγκεκριμένη σειρά χαρακτήρων. Για παράδειγμα, (ab)+ ταιριάζει με μια ακολουθία από ένα ή περισσότερα “ab”.
  5. Χαρακτήρες Κλάσεων: Μπορείτε να ορίσετε μια κλάση χαρακτήρων για να ταιριάξετε με οποιονδήποτε χαρακτήρα από αυτή την κλάση. Για παράδειγμα, [aeiou] ταιριάζει με ένα φωνητικό γράμμα.

Οι κανονικές εκφράσεις στη JavaScript περικλείονται μεταξύ / χαρακτήρων και μπορεί να περιέχουν συμβολοσειρές, συμβολοσειρές εκτός από τα /, και συμβολοσειρές που χρησιμοποιούνται για να προσδιορίσουν λειτουργίες όπως η αναζήτηση πρός τα εμπρός (/pattern/g). Επίσης, υπάρχουν διάφορες επιλογές που μπορείτε να χρησιμοποιήσετε, όπως η αναζήτηση με πεζά/κεφαλαία γράμματα (/pattern/i) ή η αναζήτηση πολλαπλών εμφανίσεων (/pattern/g).

Οι κανονικές εκφράσεις είναι ένα πολύ ισχυρό εργαλείο που μπορεί να χρησιμοποιηθεί για πολλούς σκοπούς, όπως η αναζήτηση, η αντικατάσταση, η επεξεργασία και η επιλογή κειμένου.

Παραδείγματα κανονικών εκφράσεων στη JavaScript:

  1. Αναζήτηση Προσανατολισμένη προς την Αρχή:
    Αν θέλετε να βρείτε όλα τα email που ξεκινούν με “info”, μπορείτε να χρησιμοποιήσετε:
let pattern = /^info/;
let emails = ["info@example.com", "contact@example.com", "info@domain.com"];
for (let email of emails) {
  if (pattern.test(email)) {
    console.log(email);
  }
}
  1. Αντικατάσταση Κειμένου:
    Για να αντικαταστήσετε όλα τα “apple” με “orange” σε ένα κείμενο:
let text = "I have an apple, a green apple, and a red apple.";
let newText = text.replace(/apple/g, "orange");
console.log(newText);
  1. Εύρεση Αριθμών:
    Αν θέλετε να εντοπίσετε όλους τους αριθμούς σε ένα κείμενο:
let text = "The price is $20 and the quantity is 5.";
let numbers = text.match(/\d+/g);
console.log(numbers); // ["20", "5"]
  1. Πολυπλακική Αναζήτηση:
    Αν θέλετε να εντοπίσετε όλες τις λέξεις που ξεκινούν με φωνήεν και τελειώνουν με σύμφωνο:
let text = "apple banana cherry date";
let words = text.match(/[aeiou][a-z]*[^aeiou\s]/ig);
console.log(words); // ["apple", "banana", "cherry"]
  1. Έλεγχος Έγκυρου Email:
    Για να ελέγξετε αν μια συμβολοσειρά είναι έγκυρη διεύθυνση email:
function isValidEmail(email) {
  let pattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
  return pattern.test(email);
}

console.log(isValidEmail("example@example.com")); // true
console.log(isValidEmail("invalidemail")); // false

Αυτά είναι μερικά βασικά παραδείγματα κανονικών εκφράσεων στη JavaScript. Μπορείτε να τις χρησιμοποιήσετε για να εκτελέσετε διάφορες λειτουργίες σε κείμενο, όπως αναζήτηση, αντικατάσταση, επιλογή και έλεγχο.

[adinserter block=”3″]

Το search() είναι μια μέθοδος της συμβολοσειράς στη JavaScript που χρησιμοποιείται για να αναζητήσετε μια συμβολοσειρά με βάση μια κανονική έκφραση και να επιστρέψετε τη θέση της πρώτης αντιστοίχισης.

Εδώ είναι ένα παράδειγμα:

let text = "The quick brown fox jumps over the lazy dog.";
let pattern = /fox/i; // Η i σημαίνει ανεξαρτήτως πεζών/κεφαλαίων
let position = text.search(pattern);

if (position !== -1) {
  console.log(`Βρέθηκε αντιστοίχιση στη θέση: ${position}`);
} else {
  console.log("Δεν βρέθηκε αντιστοίχιση.");
}

Σε αυτό το παράδειγμα, η κανονική έκφραση /fox/i ψάχνει για τη λέξη “fox” ανεξαρτήτως πεζών/κεφαλαίων. Η μέθοδος search() επιστρέφει τη θέση της πρώτης αντιστοίχισης. Αν δεν βρεί αντιστοίχιση, επιστρέφει -1.

Αντίστοιχα, μπορείτε να χρησιμοποιήσετε τη μέθοδο search() για να αναζητήσετε μια συμβολοσειρά με βάση μια κανονική έκφραση και να επιστρέψετε τη θέση της πρώτης αντιστοίχισης στο κείμενο.

Η μέθοδος replace() της συμβολοσειράς στη JavaScript χρησιμοποιείται για να αντικαταστήσετε μια συμβολοσειρά με μια άλλη συμβολοσειρά, βάσει μια κανονικής έκφρασης.

Εδώ είναι ένα παράδειγμα:

let text = "The quick brown fox jumps over the lazy dog.";
let pattern = /fox/i; // Η i σημαίνει ανεξαρτήτως πεζών/κεφαλαίων
let newText = text.replace(pattern, "cat");

console.log(newText);

Σε αυτό το παράδειγμα, η κανονική έκφραση /fox/i ψάχνει για τη λέξη “fox” ανεξαρτήτως πεζών/κεφαλαίων. Η μέθοδος replace() αντικαθιστά την πρώτη αντιστοίχιση που βρίσκει με την συμβολοσειρά “cat”. Το αποτέλεσμα θα είναι “The quick brown cat jumps over the lazy dog.”

Αν θέλετε να αντικαταστήσετε όλες τις αντιστοιχίσεις στο κείμενο, μπορείτε να χρησιμοποιήσετε τη σημαία “g” για κανονική έκφραση γενικού αντικατάστασης:

let text = "The quick brown fox jumps over the lazy dog. The quick brown fox.";
let pattern = /fox/ig; // Η ig σημαίνει ανεξαρτήτως πεζών/κεφαλαίων και γενική αντικατάσταση
let newText = text.replace(pattern, "cat");

console.log(newText);

Το αποτέλεσμα θα είναι “The quick brown cat jumps over the lazy dog. The quick brown cat.” όπου όλες οι εμφανίσεις της λέξης “fox” αντικαταστάθηκαν με τη λέξη “cat”.

Οι modifiers στις κανονικές εκφράσεις είναι χαρακτήρες που προστίθενται στο τέλος μιας κανονικής έκφρασης για να την καθορίσουν περισσότερο. Οι πιο συνηθισμένοι modifiers είναι:

  1. i (Case Insensitive): Αναζητά ανεξαρτήτως πεζών/κεφαλαίων.
  2. g (Global Search): Αναζητά όλες τις αντιστοιχίσεις, όχι μόνο την πρώτη.
  3. m (Multiline Search): Εφαρμόζει την αναζήτηση σε πολλαπλές γραμμές.

Εδώ είναι ένα παράδειγμα χρήσης modifiers:

let text = "The quick brown fox jumps over the lazy dog.";
let pattern = /fox/gi; // Αναζητά όλες τις αντιστοιχίσεις ανεξαρτήτως πεζών/κεφαλαίων
let matches = text.match(pattern);

console.log(matches); // ["fox"]

Σε αυτό το παράδειγμα, η κανονική έκφραση /fox/gi αναζητά όλες τις εμφανίσεις της λέξης “fox” ανεξαρτήτως πεζών/κεφαλαίων σε όλο το κείμενο. Η μέθοδος match() επιστρέφει έναν πίνακα με όλες τις αντιστοιχίσεις που βρέθηκαν.

Αυτοί είναι μερικοί από τους συνηθισμένους modifiers που μπορείτε να χρησιμοποιήσετε στις κανονικές εκφράσεις σας για περισσότερη ευελιξία και ακρίβεια.

Οι αγκύλες (brackets) χρησιμοποιούνται σε μια κανονική έκφραση για να αναζητήσουν μια σειρά από χαρακτήρες. Εδώ είναι μερικά παραδείγματα χρήσης αγκυλών σε κανονικές εκφράσεις:

  1. [abc]: Αναζητά οποιονδήποτε από τους χαρακτήρες “a”, “b” ή “c”.
  2. [0-9]: Αναζητά οποιονδήποτε αριθμητικό χαρακτήρα.
  3. [a-z]: Αναζητά οποιονδήποτε μικρό πεζό χαρακτήρα.
  4. [A-Z]: Αναζητά οποιονδήποτε κεφαλαίο χαρακτήρα.
  5. [^0-9]: Αναζητά οποιονδήποτε χαρακτήρα που δεν είναι αριθμός.

Εδώ είναι ένα παράδειγμα:

let text = "The cat in the hat is wearing a red hat.";
let pattern = /[ch]at/g; // Αναζητά "cat" ή "hat"
let matches = text.match(pattern);

console.log(matches); // ["cat", "hat", "hat"]

Σε αυτό το παράδειγμα, η κανονική έκφραση /[ch]at/g αναζητά τις λέξεις “cat” ή “hat” σε όλο το κείμενο. Ο πίνακας matches θα περιέχει όλες τις αντιστοιχίσεις που βρέθηκαν.

Οι αγκύλες είναι ένα ισχυρό εργαλείο για να ορίσετε συγκεκριμένες σειρές χαρακτήρων που θέλετε να αναζητήσετε σε μια συμβολοσειρά με μια κανονική έκφραση.

Τα μεταχαρακτήρες (metacharacters) είναι χαρακτήρες με ειδική σημασία σε μια κανονική έκφραση. Αντί να αναζητούν ακριβώς τον χαρακτήρα που αντιπροσωπεύουν, εκφράζουν κάποιο μοτίβο ή κανόνα. Εδώ είναι μερικοί μεταχαρακτήρες και η σημασία τους σε μια κανονική έκφραση:

  1. . (Dot): Αναπαριστά οποιονδήποτε χαρακτήρα, εκτός από νέα γραμμή.
  2. \d: Αναζητά έναν αριθμητικό ψηφίο (0-9).
  3. \w: Αναζητά έναν χαρακτήρα λέξης (αλφαβητικό χαρακτήρα ή αριθμητικό ψηφίο ή την κάτω παύλα).
  4. \s: Αναζητά κενό χώρο, συμπεριλαμβανομένων των κενών, των tab και των νέων γραμμών.
  5. \b: Αναζητά το όριο μιας λέξης.

Εδώ είναι ένα παράδειγμα χρήσης μεταχαρακτήρων:

let text = "The cat is on the mat.";
let pattern = /\w{3}\b/g; // Αναζητά λέξεις με τρία χαρακτήρες
let matches = text.match(pattern);

console.log(matches); // ["The", "cat", "the", "mat"]

Σε αυτό το παράδειγμα, η κανονική έκφραση /w{3}\b/g αναζητά λέξεις με ακριβώς τρεις χαρακτήρες και το όριο μιας λέξης. Ο πίνακας matches θα περιέχει όλες τις αντιστοιχίσεις που βρέθηκαν.

[adinserter block=”4″]

Οι μεταχαρακτήρες είναι ένα σημαντικό μέρος των κανονικών εκφράσεων και σας επιτρέπουν να αναζητήσετε πολύπλοκα μοτίβα σε κείμενα.

Οι ποσοτικοί (quantifiers) καθορίζουν τις ποσότητες ενός συμβολοσειριακού μοτίβου σε μια κανονική έκφραση. Οι ποσοτικοί καθορίζουν πόσες φορές μια συγκεκριμένη σειρά χαρακτήρων ή μεταχαρακτήρων επαναλαμβάνεται.

Εδώ είναι μερικοί ποσοτικοί και η σημασία τους σε μια κανονική έκφραση:

  1. {n}: Αναζητά ακριβώς n επαναλήψεις του προηγούμενου χαρακτήρα.
  2. {n,}: Αναζητά τουλάχιστον n επαναλήψεις του προηγούμενου χαρακτήρα.
  3. {n,m}: Αναζητά από n έως m επαναλήψεις του προηγούμενου χαρακτήρα.
  4. *: Αναζητά καμία ή περισσότερες επαναλήψεις του προηγούμενου χαρακτήρα.
  5. +: Αναζητά μία ή περισσότερες επαναλήψεις του προηγούμενου χαρακτήρα.
  6. ?: Αναζητά καμία ή μία επανάληψη του προηγούμενου χαρακτήρα.

Εδώ είναι ένα παράδειγμα χρήσης ποσοτικών:

let text = "Mississippi";
let pattern = /s{2}/g; // Αναζητά τον χαρακτήρα "s" ακριβώς δύο φορές
let matches = text.match(pattern);

console.log(matches); // ["ss"]

Σε αυτό το παράδειγμα, η κανονική έκφραση /s{2}/g αναζητά τον χαρακτήρα “s” που επαναλαμβάνεται ακριβώς δύο φορές. Ο πίνακας matches θα περιέχει όλες τις αντιστοιχίσεις που βρέθηκαν.

Οι ποσοτικοί επιτρέπουν να ορίσετε πόσο συχνά πρέπει να εμφανίζεται ένα μοτίβο σε ένα κείμενο με μια κανονική έκφραση.

Η μέθοδος test() του αντικειμένου RegExp χρησιμοποιείται για να ελέγξει εάν ένα μοτίβο υπάρχει σε ένα κείμενο. Επιστρέφει true αν το μοτίβο βρέθηκε, διαφορετικά επιστρέφει false.

Εδώ είναι ένα παράδειγμα χρήσης της μεθόδου test():

let text = "The quick brown fox jumps over the lazy dog";
let pattern = /fox/;

let result = pattern.test(text);

if (result) {
  console.log("The pattern 'fox' was found.");
} else {
  console.log("The pattern 'fox' was not found.");
}

Σε αυτό το παράδειγμα, η μέθοδος test() ελέγχει εάν το μοτίβο /fox/ υπάρχει στο κείμενο. Επειδή το μοτίβο βρίσκεται στο κείμενο, η μεταβλητή result θα περιέχει την τιμή true, και το αντίστοιχο μήνυμα θα εμφανιστεί στην κονσόλα.

Η μέθοδος test() είναι χρήσιμη για απλούς έλεγχους παρουσίας μοτίβων σε κείμενο.

Η μέθοδος exec() του αντικειμένου RegExp χρησιμοποιείται για να εκτελέσει μια αναζήτηση για ένα μοτίβο σε ένα κείμενο και να επιστρέψει την πρώτη αντιστοίχιση που βρέθηκε. Εάν βρεθεί αντιστοίχιση, επιστρέφει ένα αντικείμενο RegExp με πληροφορίες για την αντιστοίχιση, διαφορετικά επιστρέφει null.

Εδώ είναι ένα παράδειγμα χρήσης της μεθόδου exec():

let text = "The quick brown fox jumps over the lazy dog";
let pattern = /fox/;

let result = pattern.exec(text);

if (result) {
  console.log("Pattern found:", result[0]);
} else {
  console.log("Pattern not found.");
}

Σε αυτό το παράδειγμα, η μέθοδος exec() εκτελεί αναζήτηση για το μοτίβο /fox/ στο κείμενο. Επειδή το μοτίβο βρίσκεται στο κείμενο, η μεταβλητή result θα περιέχει ένα αντικείμενο RegExp με πληροφορίες για την αντιστοίχιση. Ο πίνακας result θα περιέχει την αντιστοίχιση που βρέθηκε στο κείμενο.

Η μέθοδος exec() είναι πολύ χρήσιμη όταν θέλετε να εξάγετε περισσότερες πληροφορίες για την αντιστοίχιση, όπως τη θέση της αντιστοίχισης στο κείμενο.

21 Αυγούστου, 2023
top
error: Content is protected !!
Μετάβαση σε γραμμή εργαλείων