⊗jsSpRELAB 133 of 294 menu

Θετική και αρνητική προοπτική στις κανονικές εκφράσεις της JavaScript

Μερικές φορές χρειάζεται να λύσουμε ένα πρόβλημα του τύπου: βρες τη συμβολοσειρά 'aaa' και αντικατέστησέ την με '!', αλλά μόνο αν μετά την 'aaa' υπάρχει 'x', ενώ το ίδιο το 'x' να μην αντικατασταθεί. Αν προσπαθήσουμε να λύσουμε το πρόβλημα 'κατευθείαν', δεν θα τα καταφέρουμε:

'aaax baaa'.replace(/aaax/g, '!'); // επιστρέφει '! baaa', αλλά θέλαμε '!x baaa'

Προοπτική προς τα εμπρός

Για να λυθεί το πρόβλημα χρειάζεται ένας τρόπος να πούμε ότι το 'x' δεν πρέπει να αντικατασταθεί. Αυτό γίνεται με τη βοήθεια ειδικών παρενθέσεων (?= ), που απλά κοιτούν, αλλά δεν «παίρνουν» μαζί τους.

Αυτές οι παρενθέσεις ονομάζονται θετική προοπτική προς τα εμπρός. Θετική - γιατί το 'x' (στην περίπτωσή μας) πρέπει να υπάρχει - μόνο τότε θα πραγματοποιηθεί η αντικατάσταση.

Ας εφαρμόσουμε αυτές τις παρενθέσεις για να λύσουμε το πρόβλημά μας:

'aaax aaab'.replace(/aaa(?=x)/g, '!'); // επιστρέφει '!x aaab'

Υπάρχει και η αρνητική προοπτική προς τα εμπρός - (?! ) - η οποία, αντίθετα, λέει ότι κάτι δεν πρέπει να υπάρχει. Στο επόμενο παράδειγμα, η αντικατάσταση θα πραγματοποιηθεί μόνο αν μετά την 'aaa' δεν υπάρχει 'x':

'aaax aaab'.replace(/aaa(?!x)/g, '!'); // επιστρέφει 'aaax !b'

Προοπτική προς τα πίσω

Παρομοίως, υπάρχει θετική προοπτική προς τα πίσω - (?<= ). Στο επόμενο παράδειγμα, η αντικατάσταση θα πραγματοποιηθεί μόνο αν πριν από την 'aaa' υπάρχει 'x':

'xaaa'.replace(/(?<=x)aaa/g, '!'); // επιστρέφει 'x!'

Και υπάρχει επίσης αρνητική προοπτική προς τα πίσω - (?<! ). Στο επόμενο παράδειγμα, η αντικατάσταση θα πραγματοποιηθεί μόνο αν πριν από την 'aaa' δεν υπάρχει 'x':

'baaa'.replace(/(?<!x)aaa/g, '!'); // επιστρέφει 'b!'

Πρακτικά προβλήματα

Δίνεται μια συμβολοσειρά που περιέχει ονόματα συναρτήσεων:

let str = 'func1() func2() func3()';

Λάβετε έναν πίνακα με τα ονόματα των συναρτήσεων από τη συμβολοσειρά.

Δίνεται μια συμβολοσειρά με μια ετικέτα:

let str = '<a href="" class="eee" id="zzz">';

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

Δίνεται μια συμβολοσειρά με μεταβλητές:

let str = '$aaa $bbb $ccc xxxx';

Λάβετε τις υποσυμβολοσειρές που προηγείται ο χαρακτήρας του δολαρίου.

Ελληνικά
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Χρησιμοποιούμε cookie για τη λειτουργία του ιστότοπου, την ανάλυση και την εξατομίκευση. Η επεξεργασία των δεδομένων γίνεται σύμφωνα με την Πολιτική Απορρήτου.
αποδοχή όλων ρύθμιση απόρριψη