This is an old revision of the document!
TP 3 - Strings et Regex
Strings
Nous avons une variable str qui est une chaîne
Les fonctions disponibles sont:
str.length - en réalité il est une variable qui nous donne la longueur de la chaîne
-
-
-
-
-
-
-
-
-
-
-
Pour en savoir plus, lisez la documentation String complète.
Expressions régulières
Mathematique
Character | Description | Exemple |
* | Zéro ou plusieurs fois | a*, (ab)* |
+ | Une ou plusieurs fois | a+, (ab)+ |
? | Zéro ou une fois | a?, (ab)? |
^ | début de string | ^ab* |
$ | fin de string | b*a$ |
. | tout symbole | . |
[ ] | Ensemble | [abc] |
\s | Espace blanc | a\sb |
[^ ] | ensemble complémentaire | [^abc] |
( ) | groupe | (abc)+ |
| | Ou | a | b, (ab) | (ba) |
JavaScript
Character | Description | Exemple |
{n} | n fois | a{3} |
{n,m} | au moins n, au plus m | a{3,7} |
\w | alphanumérique et _ | \w |
\t | TAB | a\ta* |
\n | fin de linge | a\nb |
\r | retour chariot | a\rb |
a(?!b) | a seulement si non suivi par b | a(?!b) |
a(?=b) | a seulement si suivi par b | a(?=b) |
( ) | group | a(ab)a |
Pour déclarer des expressions régulières, on peut écrire de deux façons
// making a new RexEx object the standard way
var regex = new RegEx ("[0-9]+");
// making a new RegEx object using a shortcut
var regex = /[0-9]+/;
Fonctions
String
-
str.match(regex) - Recherche dans le string une sous-string qui suit l'expression régulière
str.search(regex) - Recherche une sous-string qui correspond à l'expression régulière et renvoie l'index de celle-ci ou -1 si elle ne la trouve pas.
RegEx
regex.exec(str) - Recherche dans un string une sous-string qui suit l'expression régulière
var regex = /([0-9]+);([A-Za-z-\. ]+);([0-9]{3,4}[A-Za-z]+)/;
var match = regex.exec ('1;ANDRONIE S. Manuela - Bianca;1220F extra text');
/*
match:
[ '1;ANDRONIE S. Manuela - Bianca;1220F', // the full match
'1', // the first group
'ANDRONIE S. Manuela - Bianca', // the second group
'1220F', // the third group
index: 0, // the position
input: '1;ANDRONIE S. Manuela - Bianca;1220F extra text' ] // the full string
*/
regex.test(str) - Recherche dans une chaîne une sous-chaîne qui suit l'expression régulière et renvoie true de celle-ci trouve un ou false sinon
Pour plus de fonctions, lisez la documentation RegEx complète.
Exercises
Fichiers de groups:
Téléchargez le fichier des étudiants pour votre groupe. Créez un projet nodejs et écrivez dans une chaîne la ligne correspondant à votre nom (ex: var s = '4;BREBU L. Alexandra;1220F';). N'utilisez pas d'expressions régulières.
Affiche la position du prénom dans la string. (0.2p)
Afficher la dernière position de ”;” dans la chaîne. (0.2p)
Traitez la string et affichez sur une ligne seperarte le prénom, le nom, l'initiale et le groupe. (0.6p)
Lisez le contenu de votre fichier de groupe dans une string (voir TP 1). N'utilisez pas d'expressions régulières.
Divisez la chaîne en un tableau en utilisant le caractère de nouvelle ligne (\n) comme séparateur. (0.4p)
Traite chaque string du tableau et affiche sur une ligne distincte le prénom, le nom et le groupe de chaque etudiant. (0.6p)
Pour chaque ligne de l'exercice 2, créez un objet avec les détails de l'etudiant. Ajoutez les obejcts dans un tableau. (1p)
Téléchargez le fichier
passwd et lisez-le dans une string. Créez un tableau avec des objets contenant les informations dans le fichier. Vous pouvez trouver des détails sur le fichier
passwd ici. (
1p)
Utilisez des expressions régulières pour résoudre l'exercice 1. Vous pouvez utiliser
RegEx101 pour écrire l'expression régulière. (
1p)
Utilisez des expressions régulières pour résoudre l'exercice 3. (1p)
Utilisez des expressions régulières pour résoudre l'exercice 4. (1p)
-
combien d'erreurs il y a (0.5p)
combien de notes il y a (0.5p)
Stockez les informations dans un tableau au format suivant: (
0.5p)
[
{
"type":"error" or "note",
"line":<line_number if it exists>,
"filename":<file_name if it exists>,
"description":<the error or note description>
},
...
]
Ecrivez le tableau dans un fichier (indice: JSON.stringify) (0.5p)
Ecrivez un programme qui reçoit en paramètre un fichier java (ex:
applet.java). Lire le fichier
afficher les bibliothèques qu'il importe (0.3p)
afficher toutes les classes qu'il déclare (0.3p)
afficher tous les clases qu'il déclare (nom et et la classe qu'il étend) (0.1p)
afficher toutes les fonctions qu'il déclare (nom et type de retour) (0.3p)
Bonus: Créez un projet nodejs qui reçoit en paramètre un fichier java et crée un tableau avec des objets pour chacune des classes qu'il déclare. Chaque objet a le format suivant (
1p):
{
"name":<name of class>,
"extends":<name of class it extends>,
"functions": [
{
"name":<function_name>,
"return_type":<function_return type>,
"parameters":<number of parameters>
},
...
]
}