Si j'ai une chaîne avec n'importe quel type de caractère non alphanumérique:
"This., -/ is #! an $ % ^ & * example ;: {} of a = -_ string with `~)() punctuation"
Comment en obtenir une version sans ponctuation en JavaScript:
"This is an example of a string with punctuation"
javascript
regex
Quentin Fisk
la source
la source
\s
d'espacement ( ) par un seul espace. Si vous souhaitez réduire un certain nombre de caractères blancs à un seul, vous quitteriez de la limite supérieure comme ceci:replace(/\s{2,}/g, ' ')
.@+?><[]+
):replace(/[\.,-\/#!$%\^&\*;:{}=\-_`~()@\+\?><\[\]\+]/g, '')
. Si quelqu'un cherche un ensemble encore légèrement plus complet.!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
Ce qui fonctionne mieux pour moi, donc une autre alternative serait:replace(/['!"#$%&\\'()\*+,\-\.\/:;<=>?@\[\\\]\^_`{|}~']/g,"");
Supprime tout sauf les caractères alphanumériques et les espaces, puis réduit plusieurs caractères adjacents en espaces simples.
Explication détaillée:
\w
est un chiffre, une lettre ou un trait de soulignement.\s
est n'importe quel espace blanc.[^\w\s]
est tout ce qui n'est pas un chiffre, une lettre, un espace ou un trait de soulignement.[^\w\s]|_
est le même que le n ° 3 sauf avec les traits de soulignement ajoutés.la source
wouldn't
etdon't
Voici les caractères de ponctuation standard pour US-ASCII:
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
Pour la ponctuation Unicode (comme les guillemets, les tirets em, etc.), vous pouvez facilement faire correspondre des plages de blocs spécifiques. Le bloc de ponctuation générale est
\u2000-\u206F
, et le bloc de ponctuation supplémentaire est\u2E00-\u2E7F
.Mis ensemble et correctement échappé, vous obtenez le RegExp suivant:
Cela devrait correspondre à peu près à toutes les ponctuations que vous rencontrez. Donc, pour répondre à la question initiale:
Source US-ASCII: http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#posix
Source Unicode: http://kourge.net/projects/regexp-unicode-block
la source
/ [^ A-Za-z0-9 \ s] / g doit correspondre à toutes les ponctuations mais conserver les espaces. Vous pouvez donc utiliser
.replace(/\s{2,}/g, " ")
pour remplacer des espaces supplémentaires si vous avez besoin de le faire. Vous pouvez tester l'expression régulière sur http://rubular.com/Mise à jour : ne fonctionnera que si l'entrée est en anglais ANSI.
la source
J'ai rencontré le même problème, cette solution a fait l'affaire et était très lisible:
Résultat:
L'astuce consistait à créer un ensemble annulé . Cela signifie qu'il correspond à tout ce qui n'est pas dans l'ensemble, c'est
[^abc]
-à- dire - pas a, b ou c\W
est n'importe quel non-mot, donc[^\W]+
annulera tout ce qui n'est pas un mot char .En ajoutant le _ (trait de soulignement), vous pouvez également annuler cela.
Faites-le s'appliquer globalement
/g
, vous pouvez alors exécuter n'importe quelle chaîne et effacer la ponctuation:Agréable et propre ;)
la source
Je vais juste le mettre ici pour les autres.
Faites correspondre tous les caractères de ponctuation pour toutes les langues:
Construit à partir de la catégorie de ponctuation Unicode et ajouté des symboles de clavier courants tels
$
que des crochets et\-=_
http://www.fileformat.info/info/unicode/category/Po/list.htm
remplacement de base:
ajouté \ s comme espace
ajouté ^ pour inverser patternt pour correspondre non pas à la ponctuation mais aux mots eux-mêmes
pour une langue comme l'hébreu, peut-être supprimer "" les guillemets simples et doubles. Et y réfléchir davantage.
en utilisant ce script:
étape 1: sélectionnez dans Firefox en tenant le contrôle une colonne de numéros U + 1234 et copiez-la, ne copiez pas U + 12456 ils remplacent l'anglais
étape 2 (je l'ai fait dans chrome) trouvez une zone de texte et collez-la dedans, puis cliquez avec le bouton droit et cliquez sur inspecter. alors vous pouvez accéder à l'élément sélectionné avec $ 0.
étape 3 copié sur les premières lettres l'ascii sous forme de caractères séparés et non de plages car quelqu'un pourrait ajouter ou supprimer des caractères individuels
la source
Dans un langage compatible Unicode, la propriété de caractère de ponctuation Unicode est
\p{P}
- que vous pouvez généralement abréger\pP
et parfois développer pour plus\p{Punctuation}
de lisibilité.Utilisez-vous une bibliothèque d'expressions régulières compatible Perl?
la source
Si vous souhaitez supprimer la ponctuation d'une chaîne, vous devez utiliser la
P
classe Unicode.Mais, comme les classes ne sont pas acceptées dans le JavaScript RegEx, vous pouvez essayer ce RegEx qui devrait correspondre à toutes les ponctuations. Il correspond aux catégories suivantes: Pc Pd Pe Pf Pi Po Ps Sc Sk Sm So GeneralPunctuation SupplementalPunctuation CJKSymbolsAndPunctuation CuneiformNumbersAndPunctuation.
Je l'ai créé à l'aide de cet outil en ligne qui génère des expressions régulières spécifiquement pour JavaScript. C'est le code pour atteindre votre objectif:
la source
Pour les chaînes en-US (anglais américain), cela devrait suffire:
Sachez que si vous supportez UTF-8 et des caractères comme chinois / russe et tout, cela les remplacera également, vous devez donc vraiment spécifier ce que vous voulez.
la source
si vous utilisez lodash
Cet exemple
la source
Selon la liste des ponctuations de Wikipedia, j'ai dû créer l'expression régulière suivante qui détecte les ponctuations:
[\.’'\[\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\-?‘’“”'";/⁄·\&*@\•^†‡°”¡¿※#№÷׺ª%‰+−=‱¶′″‴§~_|‖¦©℗®℠™¤₳฿₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥]
la source
/
( le plus courant), il doit être échappé à l' intérieur de la classe de caractères ci - dessus en ajoutant une barre oblique inverse avant, comme ceci:\/
. Voici comment vous l' utiliser:"String!! With, Punctuation.".replace(/[\.’'\[\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\-?‘’“”'";\/⁄·\&*@\•^†‡°”¡¿※#№÷׺ª%‰+−=‱¶′″‴§~_|‖¦©℗®℠™¤₳฿₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥]+/g,"")
. Au fait, je ne vois le backtick (`) nulle part là-dedans, comment ça se fait?Si vous souhaitez ne conserver que les alphabets et les espaces, vous pouvez faire:
la source
Cela dépend de ce que vous essayez de retourner. J'ai utilisé ceci récemment:
la source