Je recherche une solution RegEx soignée à remplacer
- Tous les caractères non alphanumériques
- Tous les NewLines
- Toutes les instances multiples d'espaces blancs
Avec un seul espace
Pour ceux qui jouent à la maison ( ce qui suit fonctionne )
text.replace(/[^a-z0-9]/gmi, " ").replace(/\s+/g, " ");
Je pense que RegEx est probablement assez puissant pour y parvenir en une seule déclaration. Les composants dont je pense avoir besoin sont
[^a-z0-9]
- pour supprimer les caractères non alphanumériques\s+
- correspond à toutes les collections d'espaces\r?\n|\r
- correspond à toute nouvelle ligne/gmi
- global, multiligne, insensible à la casse
Cependant, je n'arrive pas à styler l'expression régulière de la bonne manière ( ce qui suit ne fonctionne pas )
text.replace(/[^a-z0-9]|\s+|\r?\n|\r/gmi, " ");
Contribution
234&^%,Me,2 2013 1080p x264 5 1 BluRay
S01(*&asd 05
S1E5
1x05
1x5
Sortie désirée
234 Me 2 2013 1080p x264 5 1 BluRay S01 asd 05 S1E5 1x05 1x5
javascript
regex
replace
alphanumeric
Le général
la source
la source
Réponses:
Attention, cela
\W
laisse le trait de soulignement . Un court équivalent pour[^a-zA-Z0-9]
serait[\W_]
\W
est la négation du raccourci\w
pour les[A-Za-z0-9_]
caractères de mot (y compris le trait de soulignement)Exemple sur regex101.com
la source
\W
cela reconnaîtra également les caractères non latins comme des caractères autres que des mots.Jonny 5 m'a battu. J'allais suggérer d'utiliser le
\W+
sans le\s
comme danstext.replace(/\W+/g, " ")
. Cela couvre également les espaces blancs.la source
\W+
, pas[W+]
Eh bien, bonne année à tous!&
et-
. Des conseils?Puisque la
[^a-z0-9]
classe de caractères contient tout ce qui n'est pas alnum, elle contient aussi des caractères blancs!la source
Eh bien, je pense qu'il vous suffit d'ajouter un quantificateur à chaque motif. Aussi la chose du retour chariot est un peu drôle:
modifier La
\s
chose correspond\r
et\n
aussi.la source
A a vu un article différent qui avait également des signes diacritiques, ce qui est génial
s.replace(/[^a-zA-Z0-9À-ž\s]/g, "")
la source
C'est un ancien de mes messages, les réponses acceptées sont bonnes pour la plupart. Cependant, j'ai décidé de comparer chaque solution et une autre évidente (juste pour le plaisir). Je me suis demandé s'il y avait une différence entre les modèles de regex sur différents navigateurs avec des chaînes de tailles différentes.
Donc, fondamentalement, j'ai utilisé jsPerf sur
Les modèles de regex que j'ai testés étaient
/[\W_]+/g
/[^a-z0-9]+/gi
/[^a-zA-Z0-9]+/g
Je les ai chargés avec une longueur de chaîne de caractères aléatoires
Exemple de javascript que j'ai utilisé
var newstr = str.replace(/[\W_]+/g," ");
Chaque exécution consistait en 50 échantillons ou plus sur chaque expression régulière, et je les ai exécutés 5 fois sur chaque navigateur.
Faisons courir nos chevaux!
Résultats
À vrai dire, Regex dans les deux navigateurs (en tenant compte de la déviation) était presque impossible à distinguer, mais je pense que si cela fonctionnait encore plus de fois, les résultats deviendraient un peu plus clairs (mais pas beaucoup).
Mise à l'échelle théorique pour 1 caractère
Je n'apprécierais pas trop ces résultats car ce n'est pas vraiment une différence significative, tout ce que nous pouvons vraiment dire, c'est que le bord est plus lent: o. De plus, je m'ennuyais vraiment.
Quoi qu'il en soit, vous pouvez exécuter la référence pour vous-même.
Jsperf Benchmark ici
la source
Pour remplacer par des tirets, procédez comme suit:
la source