10644 sujets

JavaScript, DOM et API Web HTML5

Bonjour,
J'ai une regex de recherche qui exclut de cette recherche, les chiffres, les points, les virgules, les espaces, les points d'exclamation... :


var variable = "123 nous irons au bois !"
var Test = variable.match(/[^ \-,.\!0-9]/g);


Maintenant j'aimerai aussi que ce test exclut un mot entier par exemple "bois" !
Mais là je rame à fond !

Merci de votre aide !
Et l'eau,

Quel est le but de ton opération d'une manière générale. Pourquoi veux tu exclure un mot ou plusieurs et des caractères tels que !, . - etc. ?
/* Esquive la Droite */
var pattern1 =  /(?:[!-]|\d+|\bbois\b)/i;
var contents = [
   '123, nous irons au bois !',
   'Bonjour le monde',
   'Boisseau de cheminée'
];
contents.forEach(function(content) {
   const result = (!pattern1.test(content)) ? ' Ok' : 'Manqué';
   console.log(content, result);
});

Pour faire des essais en ligne :
https://regex101.com/
Modifié par bazooka07 (14 Nov 2018 - 14:33)
En fait je me rends compte que je me suis peut-être mal exprimé et je m'en excuse.

En fait je cherche à savoir, si dans une variable ("123, nous irons au bois !") si il y a autre chose que des chiffres, des points, des virgules des points d'exclamations ou des mots ("bois" par exemple).

"123, nous irons au bois !" = OUI il y autre chose ("nous" + "irons")
"456,... !" = NON
"789 cueillir des..." = OUI ("cueillir" + "des")
bazooka07 a écrit :
/* Esquive la Droite */
var pattern1 =  /(?:[!-]|\d+|\bbois\b)/i;
var contents = [
   '123, nous irons au bois !',
   'Bonjour le monde',
   'Boisseau de cheminée'
];
contents.forEach(function(content) {
   const result = (!pattern1.test(content)) ? ' Ok' : 'Manqué';
   console.log(content, result);
});


J'avais un pattern sensiblement idem. Il y a plus simple que d'utiliser les assertions. Après, il y a plusieurs manières d'arriver à ses fins.

déclarer une constante dans une boucle alors que la valeur oscille, n'est pas plutôt une variable que tu voulais faire ? Smiley cligne Smiley smile

Aquoibon a écrit :
En fait je me rends compte que je me suis peut-être mal exprimé et je m'en excuse.

En fait je cherche à savoir, si dans une variable ("123, nous irons au bois !") si il y a autre chose que des chiffres, des points, des virgules des points d'exclamations ou des mots ("bois" par exemple).

"123, nous irons au bois !" = OUI il y autre chose ("nous" + "irons")
"456,... !" = NON
"789 cueillir des..." = OUI ("cueillir" + "des")



var pattern = /(\bbois\b)|([ \-,.\!0-9]+)/gi,
    rows = [
        '123, nous irons au bois !',
        'Bonjour le monde',
        'Boisseau de cheminée',
        'bois!'
    ],
    result = [];

rows.forEach((row)=>{
    result.push(row.replace(pattern, '').trim().length > 0);
});

console.log(result);

Modifié par niuxe (14 Nov 2018 - 17:05)
niuxe a écrit :
déclarer une constante dans une boucle alors que la valeur oscille, n'est pas plutôt une variable que tu voulais faire ?

C'est une variable dont la portée est limitée à la boucle et qui est détruite à la fin de chaque oscillation. Et sa valeur ne doit pas varier pendant l'oscillation. Donc, c'est une "constante".
'use strict' accepte cela très bien.

Simplifions :
var pattern = /(\bbois\b)|([\s,.\!\d-]+)/gi
remplacer 0-9 par \d
coller - à la fin pour éviter de l'échapper
et les tabulations ?

Pas sûr que cela soit une bonne idée de mettre les espaces dans pattern. Seuls les mots entiers seront pris en compte.
Modifié par bazooka07 (14 Nov 2018 - 17:24)
bazooka07 a écrit :

C'est une variable dont la portée est limitée à la boucle et qui est détruite à la fin de chaque oscillation. Et sa valeur ne doit pas varier pendant l'oscillation. Donc, c'est une "constante".
'use strict' accepte cela très bien.

Bizarre que ça soit accepté. D'ailleurs, dans ton cas, j'aurais peut être utilisé un let. Mais bon, var dans un fonction (même anonyme) est cloisonné (sa portée est restreinte)

bazooka07 a écrit :

Simplifions :
var pattern = /(\bbois\b)|([\s,.\!\d-]+)/gi
remplacer 0-9 par \d
coller - à la fin pour éviter de l'échapper
et les tabulations ?

Pas sûr que cela soit une bonne idée de mettre les espaces dans pattern. Seuls les mots entiers seront pris en compte.


+1 J'ai repris son pattern initial d'où le 0-9 et non le \d comme tu le préconises. Après c'est juste "un alias" (je sais plus comment ça s'appelle => la fatigue de la journée).

Comme je l'ai dit au début, je ne vois pas le but de sa démarche. Mais je suis de ton avis, à priori, les espaces dans le pattern, c'est moyen Smiley smile
Il faut bien distinguer PCRE et Perl Expression, ce n'est pas la méme chose!! Avec les *\s*(X/d)-_\e vous devriez avoir l'optimisation requise. Après tout dépend de la volumétrie, const ou var de let est acceptable. Peut-être des bouts de code aideront.
@+