11402 sujets

JavaScript, DOM et API Web HTML5

Pages :
Bonjour,
J'aimerais créer un script JavaScript pour compter le nombre de mots d'une variable, mais je ne sais pas comment m'y prendre...

Un mot peut être séparé par une espace (ou une insécable), sauf s'il y en a plusieurs à côté (où c'est une erreur) et ceux entourant la ponctuation (deux points, points virgules...) ne comptent pas : "cela |est" = 2 mots et "cela     |est" = 2 mots et "Cela |est |cool ; |cela |est |bien" = 6 mots.
Il peut être séparé par des apostrophes : "c'|est" = 2 mots, mais pas par celles qui sont utilisées comme guillemets "C'|est| 'n'|importe |quoi' !" = 5 mots.
Un mot est séparé par un signe égal, une parenthèse de factorisation (seulement de factorisation), un astérisque, un slash, un plus, une soustraction (mais pas par un mot composé)... dans un calcul "4/|2|(1+|1)=|1 |et |4" = 7 mots
Et j'ai peut-être encore oublié des règles...

Je pensais donc ajouter des espaces avant les apostrophes, signes égal, parenthèses, signes fois (* et × Alt158 et • Alt7), signes divisé (/ et ÷ Alt246), signes plus, signes moins avec un chiffre de chaque côté, puis transformer les espaces insécables (Alt255) en normaux, puis supprimer les espaces qui se suivent, puis supprimer ceux précédés d'un signe de ponctuation, lui-même précédé d'une espace, puis compter le nombre d'espaces...
Mais je ne vois pas comment faire ceci...

Pourrait-on m'aider ?

Merci beaucoup !
Modifié par js_html (17 Feb 2021 - 15:44)
Merci !
Je ne comprends strictement rien (au "gi", au ?, au : ), mais ça fonctionne qu'un petit peu !

Là, il y a un problème avec les apostrophes, qui devraient séparer les mots, mais qui ne le font pas ici (si on les enlève de la regex, c'est bon mais du coup, ça prend pas en compte ceux utilisés comme guillemets).
Là, les mots composés comptent une seule fois (c'est bon) mais en tant que calculs, les moins ne séparent pas....

Quelle galère !! Smiley bawling
Modifié par js_html (17 Feb 2021 - 15:55)
Modérateur
Ouais j'avoue c'était un début de piste j'ai juste repris le code tel quel et ca donnais les même résultat que toi sur tes exemples. Il faut améliorer la regexp... Perso j'utilise https://regexr.com pour les tester et les construire c'est assez pratique.
_laurent a écrit :
et ca donnais les même résultat que toi sur tes exemples
Non, ça donnait les mêmes résultats après avoir déjà ajouté des espaces (d'exemples) !

_laurent a écrit :
Il faut améliorer la regexp...
Je suis complètement d'accord, d'où ma question, mais la regexp peut-elle faire une différence entre apostrophes dans un mot et ceux comme guillemets (avec un espace avant ou après) et différencier les moins et traits d'union ?

On dit regexp ou regex ?

Merci pour l'amélioration de la regex pour respecter tous les critères (et mêmes ceux auxquels je n'ai pas pensé) ! Smiley lol
Modérateur
js_html a écrit :

On dit regexp ou regex ?


expression rationnelle ou expression régulière Smiley cligne
Et en abrégé, regex ou regexp ou on s'en moque ?

Et quelqu'un qui les manipule bien arriverait-il à en faire une qui convienne ?

Merci beaucoup !
Modérateur
Il faut trouver une règle sur comment différencier - de - et ' de '.... et c'est pas une histoire de regex(p) il faut que tu arrive a formuler comment les différencier..
Si, j'ai !
Les moins sont collés à des chiffres (0, 1, 2, 3, 4, 5, 6, 7, 8 ou 9) et les autres (traits d'union et parenthèses - comme ça - ne comptent pas).
Les apostrophes ont une lettre de chaque côté et celles utilisées comme guillemets ont une espace d'au moins un côté !

Voilà !
Parsimonhi, l'un de nos deux ne comprend pas l'autre...

Ces mots, Ils ont quoi de différent ???
Si l'apostrophe est utilisée en tant que guillemets, elle a une espace autour, sinon, non...
Modérateur
Bonjour,

Alors comment peut-on faire pour différencier d'une part presqu'île (1 mot) et qu'il (2 mots) ?

Je ne vois pas comment tu pourrais t'en sortir sans dictionnaire.

Amicalement,
Modérateur
Bonjour,

passe-t-il : combien de mots ?
passe-passe : combien de mots ?

Là encore, ce n'est pas simple.

Amicalement,
Modérateur
Bonjour,

js_html a écrit :
Bonjour,
Non, presqu'île=2 mots et qu'il=2 mots !

Hum ! Bon, pourquoi pas. Et pour aujourd'hui, prud'homme, quelqu'un, entr'ouvert, et d'une manière générale tous les "mots" contenant une apostrophe ? On les considère comme 2 mots ?

C'est juste une question.

Amicalement,
Bonjour,
"passe-passe" et "passe-t-il" sont 1 mot chacun !
Oui, tous les mots avec des apostrophes comptent autant de mots que d'apostrophes+1 !

a écrit :
à l’écrit, le séparateur est l’espace.
– L’apostrophe joue le rôle d’espace puisque l’oiseau = le oiseau – qu’il = que il
– Les signes typographiques ! ? … ne sont pas des mots puisqu’à l’oral ils apparaissent à l’écrit pour rendre compte d’une intonation.
– les nombres comptent et d’ailleurs, à l’écrit ils doivent être en toutes lettres : j’ai 5 frères = j’ai cinq frères
– Le trait d’union des mots composés comblent l’espace (aussi bien visuellement que sémantiquement) un garde-fou est une unité sémantique qui a un autre sens que « garde » et « fou » : si bien que avec les R.O. de 1990, et la possibilité de supprimer les traits d’union, des textes ne perdent pas de mots.

Modifié par js_html (18 Feb 2021 - 14:47)
Modérateur
Est-ce que :
[^\d\W]+[^\d\W-]*|[\d]*

correspond du coup ?
upload/1613656757-42161-capture.jpg

https://regexr.com/5mp6s


(oops j'ai oublié les caractères spéciaux comme le î Smiley sweatdrop )
(et mince j'ai perdu les - aussi... Smiley lol )
Modifié par _laurent (18 Feb 2021 - 15:02)