2009-06-19 9 views
10

Comment puis-je supprimer tous les caractères d'une chaîne qui ne sont pas des lettres à l'aide d'un JavaScript RegEx?Comment supprimer tous les caractères d'une chaîne

+9

@RD - Quelle réponse attendez-vous? Je ne pense pas que cela devienne beaucoup plus simple que la réponse de Paolo ... Et quelles "sources crédibles et/ou officielles"!? Cela n'a aucun sens ... – Kobi

+1

une prime n'est pas un bouton "faire tester le code pour moi". – AlfredoVR

Répondre

57

Vous pouvez utiliser la méthode replace:

'Hey! The #123 sure is fun!'.replace(/[^A-Za-z]+/g, ''); 
>>> "HeyThesureisfun" 

Si vous voulez garder des espaces:

'Hey! The #123 sure is fun!'.replace(/[^A-Za-z\s]+/g, ''); 
>>> "Hey The sure is fun" 

Le regex /[^a-z\s]/gi revient à dire à tout correspond pas à la lettre az ou un espace (\ s), tout en le faisant globalement (le drapeau g) et en ignorant le cas de la chaîne (le drapeau i).

+0

Juste vérifié dans la console et cela a très bien fonctionné. Je me demande s'il voulait garder des espaces. – Nosredna

+10

+1 Mais j'utiliserais l'équivalent un peu plus efficace: 'remplacer (/ [^ A-Za-z \ s] +/g, '');' Cela correspond à plus d'un caractère dans chaque "gulp", et le mode case-sensive peut être légèrement plus rapide avec certains moteurs regex. – ridgerunner

+0

Notez que cela supprimera également les caractères accentués, qui à mon avis sont des lettres. – rds

10

RegEx propriétés d'instance utilisées g, i

mondiale: Que ce soit pour tester l'expression régulière contre toutes les correspondances possibles dans une chaîne, ou seulement contre le premier.

ignoreCase: Que ce soit pour ignorer la casse en essayant une correspondance dans une chaîne.

RegEx caractères spéciaux utilisés [a-z], +

[^ xyz]: Un caractère niées ou complété ensemble. Autrement dit, il correspond à tout ce qui n'est pas inclus dans les parenthèses. Vous pouvez spécifier une plage de caractères en utilisant un trait d'union.

Par exemple, [abcd] est le même que [a-d]. Ils correspondent au «b» dans «brisket» et le «c» dans «chop».

+: Correspond à l'élément précédent 1 fois ou plus. Équivalent à {1,}.

syntaxe méthode JavaScript string replace

str.replace (regexp | substr, newSubStr | fonction [, drapeaux non standard]);

Les drapeaux non standard g & i peuvent être transmis dans la syntaxe ou remplacer construit dans le regex. exemples:

var re = /[^a-z]+/gi; var str = "this is a string"; var newstr = str.replace(re, ""); print(newstr); 

var str = "this is a string"; var newstr = str.replace(/[^a-z]+/, "", "gi"); print(newstr); 

Pour correspondre à des caractères blancs et \ s seraient ajoutés à la regex [^a-z\s]+.

JavaScript Reference

+0

Les drapeaux sont dans la norme ECMAScript. Mais le troisième argument (flags) de 'String.prototype.replace' \t est [JavaScript-propriétaire] (https://developer.mozilla.org/fr/JavaScript/Reference/Global_Objects/String/replace). Eviter en faveur des drapeaux sur le premier argument (RegExp). – PointedEars

8

Expressions régulières dans ECMAScript mises en œuvre sont à mon humble avis le mieux expliqué au Mozilla Developer Network (formerly, Mozilla Developer Center) dans le RegExp article du JavaScript Language Reference pp.

Cependant, comme il est indiqué, les réponses précédentes ne prennent pas non-anglais lettres en compte, tels que les trémas et les lettres accentuées.Afin de ne pas supprimer ces lettres de la chaîne, vous devez les exclure de la gamme de caractères comme ceci:

var s = "Victor 1 jagt 2 zwölf 3 Boxkämpfer 4 quer 5 über 6 den 7 Sylter 8 Deich"; 

s = s.replace(/[^a-zäöüß]+/gi, ""); 

Cette approche devient vite fastidieuse et difficile à maintenir, surtout si plusieurs langues naturelles doivent être considéré (et même dans un bon anglais il ya des mots étrangers comme "déjà vu" et "fiancé").

Par conséquent, parmi les autres fonctionnalités PCRE, JSX:regexp.js vous permet d'utiliser des expressions régulières pouvant utiliser des classes de propriétés Unicode, via le Unicode Character Database (UCD).

alors vous write¹

var s = "Victor 1 jagt 2 zwölf 3 Boxkämpfer 4 quer 5 über 6 den 7 Sylter 8 Deich"; 

var rxNotLetter = new jsx.regexp.RegExp("\\P{Ll}+", "gi"); 

s = s.replace(rxNotLetter, ""); 

ou

var s = "El 1 veloz 2 murciélago 3 hindú 4 comía 5 feliz 6 cardillo 7 y 8 kiwi. La cigüeña tocaba el saxofón detrás del palenque de paja" 
     + " – Съешь 1 же 2 ещё 3 этих 4 мягких 5 французских 6 булок, да 7 выпей 8 чаю."; 

var rxNotLetterOrWhitespace = new jsx.regexp.RegExp("[^\\p{Ll}\\p{Lu}\\s]+", "g"); 

s = s.replace(rxNotLetterOrWhitespace, ""); 

pour réduire la dépendance sur les bizarreries majuscules/minuscules de mises en œuvre (et être plus extensible), pour une RegExp qui exclut tous les non-lettre Caractères Unicode (et espace blanc dans le second exemple).

Testcase

Assurez-vous de fournir une version de la base de données de caractères Unicode, ainsi, car il est grand, en pleine mutation, et donc pas intégré dans regexp.js (JSX contient un texte verbeux et la version de script compactée l'UCD, les deux peuvent être utilisés, et ce dernier est préféré, par regexp.js). Notez que a conforming ECMAScript implementation does not need to support characters beyond the Basic Multilingual Plane (U+0000 to U+FFFF), donc jsx.regexp.RegExp ne peuvent actuellement pas les supporter même s'ils sont dans le UCD. Voir la documentation dans le code source pour plus de détails.

¹ Pangrams de Wikipedia, l'encyclopédie libre.

+2

Upvoted. C'est un must s'il y a des caractères non anglais! – SoonDead

Questions connexes