Πολυγραμμικότητα στις κανονικές εκφράσεις της JavaScript
Οι κανονικές εκφράσεις όταν δουλεύουν με πολυγραμμικές συμβολοσειρές έχουν τα δικά τους χαρακτηριστικά. Ας τα εξετάσουμε με το παράδειγμα της ακόλουθης συμβολοσειράς, που περιέχει συνηθισμένους χαρακτήρες, χαρακτήρες αλλαγής γραμμής και ταμπουλάτσεις:
let str = `111
222
333
444`;
Αλλαγή γραμμής
Οι χαρακτήρες αλλαγής γραμμής μπορούν
να πιαστούν με την εντολή '\n':
let res = str.replace(/\n/g, '!');
Ως αποτέλεσμα, στη μεταβλητή θα γραφτεί το ακόλουθο (τα κενά μεταξύ των γραμμών είναι ταμπουλάτσεις):
`111! 222! 333! 444`;
Ταμπουλάτση
Οι χαρακτήρες ταμπουλάτσης μπορούν
να πιαστούν με την εντολή '\t':
let res = str.replace(/\t/g, '!');
Ως αποτέλεσμα, στη μεταβλητή θα γραφτεί το ακόλουθο:
`
111
!222
!333
!444
`;
Λειτουργία της τελείας
Η εντολή '.' για μια πολυγραμμική
συμβολοσειρά δεν πιάνει τους χαρακτήρες αλλαγής γραμμής:
let res = str.replace(/./g, '!');
Ως αποτέλεσμα, στη μεταβλητή θα γραφτεί το ακόλουθο:
`
!!!
!!!!
!!!!
!!!!
`;
Οποιοσδήποτε χαρακτήρας
Για να πιάσουμε όλους τους χαρακτήρες σε μια πολυγραμμική
συμβολοσειρά, χρησιμοποιείται μια έξυπνη τεχνική με τη μορφή
του συνδυασμού [\s\S]. Μια τέτοια κατασκευή θα βρει
όλους τους συνηθισμένους χαρακτήρες και όλες τις αλλαγές γραμμής:
let res = str.replace(/[\s\S]/g, '!');
Ως αποτέλεσμα, στη μεταβλητή θα γραφτεί το ακόλουθο:
`!!!!!!!!!!!!!!!!!!`;
Καρέκλα (^)
Με τον τροποποιητή 'm'
μπορούμε να ενεργοποιήσουμε τη λειτουργία πολλαπλών γραμμών.
Σε αυτήν την περίπτωση, η καρέκλα θα πιάνει
την αρχή κάθε γραμμής:
let res = str.replace(/^/gm, '!');
Ως αποτέλεσμα, στη μεταβλητή θα γραφτεί το ακόλουθο:
`
!111
!222
!333
!444
`;
Δολάριο ($)
Η εντολή '$' στη λειτουργία πολλαπλών γραμμών
θα πιάνει το τέλος κάθε γραμμής:
let res = str.replace(/$/gm, '!');
Ως αποτέλεσμα, στη μεταβλητή θα γραφτεί το ακόλουθο:
`
111!
222!
333!
444!
`;
Πρακτικά προβλήματα
Δίνεται μια συμβολοσειρά:
`
abc
def
ghi
jkl
`;
Γράψτε μια κανονική έκφραση που θα μετατρέψει αυτήν τη συμβολοσειρά στην ακόλουθη:
`
abc!
def!
ghi!
jkl!
`;
Δίνεται μια συμβολοσειρά:
`
abc
def
ghi
jkl
`;
Γράψτε μια κανονική έκφραση που θα μετατρέψει αυτήν τη συμβολοσειρά στην ακόλουθη:
`
! abc
! def
! ghi
! jkl
`;
Δίνεται μια συμβολοσειρά:
`
abc
def
ghi
jkl
`;
Γράψτε μια κανονική έκφραση που θα μετατρέψει αυτήν τη συμβολοσειρά στην ακόλουθη:
`!
abc
def
ghi
jkl
!`;
Δίνεται μια συμβολοσειρά:
`
abc
def
ghi
jkl
`;
Γράψτε μια κανονική έκφραση που θα μετατρέψει αυτήν τη συμβολοσειρά στην ακόλουθη:
`!
! abc
! def
! ghi
! jkl
!`;
Δίνεται μια συμβολοσειρά:
`
abc
def
ghi
jkl
`;
Γράψτε μια κανονική έκφραση που θα μετατρέψει αυτήν τη συμβολοσειρά στην ακόλουθη:
`!
abc!
def!
ghi!
jkl!
!`;
Δίνεται μια συμβολοσειρά:
`
abc
def
ghi
jkl
`;
Γράψτε μια κανονική έκφραση που θα μετατρέψει αυτήν τη συμβολοσειρά στην ακόλουθη:
`
!abc
!def
!ghi
!jkl
`;