Je veux convertir la chaîne suivante en sortie fournie.
Input: "\\test\red\bob\fred\new"
Output: "testredbobfrednew"
Je n'ai pas trouvé une solution qui traitera des caractères spéciaux comme \r
, \n
, \b
, etc.
En gros, je veux juste me débarrasser de tout ce qui n'est pas alphanumérique. Voici ce que j'ai essayé ...
Attempt 1: "\\test\red\bob\fred\new".replace(/[_\W]+/g, "");
Output 1: "testedobredew"
Attempt 2: "\\test\red\bob\fred\new".replace(/['`~!@#$%^&*()_|+-=?;:'",.<>\{\}\[\]\\\/]/gi, "");
Output 2: "testedobred [newline] ew"
Attempt 3: "\\test\red\bob\fred\new".replace(/[^a-zA-Z0-9]/, "");
Output 3: "testedobred [newline] ew"
Attempt 4: "\\test\red\bob\fred\new".replace(/[^a-z0-9\s]/gi, '');
Output 4: "testedobred [newline] ew"
Une autre tentative avec plusieurs étapes
function cleanID(id) {
id = id.toUpperCase();
id = id.replace( /\t/ , "T");
id = id.replace( /\n/ , "N");
id = id.replace( /\r/ , "R");
id = id.replace( /\b/ , "B");
id = id.replace( /\f/ , "F");
return id.replace( /[^a-zA-Z0-9]/ , "");
}
avec résultats
Attempt 1: cleanID("\\test\red\bob\fred\new");
Output 1: "BTESTREDOBFREDNEW"
Toute aide serait appréciée.
Solution de travail:
Final Attempt 1: return JSON.stringify("\\test\red\bob\fred\new").replace( /\W/g , '');
Output 1: "testredbobfrednew"
javascript
regex
Bobby Cannon
la source
la source
var Input = "\\test\red\bob\fred\new"
cette chaîne ne contient pas de "rouge" donc votre 1ère tentative est correcte, testez vous contre le littéral"\\\\test\\red\\bob\\fred\\new"
?/[^\w\s]+/gi
essaye ça.Réponses:
Suppression de caractères non alphanumériques
Ce qui suit est le / une expression rationnelle correcte pour supprimer les caractères non alphanumériques d'une chaîne d'entrée:
Notez que
\W
c'est l'équivalent de[^0-9a-zA-Z_]
- il inclut le caractère de soulignement. Pour supprimer également les traits de soulignement, utilisez par exemple:L'entrée est mal formée
Étant donné que la chaîne de test contient divers caractères d'échappement, qui ne sont pas alphanumériques, elle les supprimera.
Une barre oblique inversée dans la chaîne doit s'échapper si elle doit être prise à la lettre:
Manipulation de chaînes mal formées
Si vous n'êtes pas en mesure d'échapper correctement la chaîne d'entrée (pourquoi pas?), Ou si elle provient d'une sorte de source non fiable / mal configurée - vous pouvez faire quelque chose comme ceci:
Notez que la représentation json d'une chaîne inclut les guillemets:
Mais ils sont également supprimés par l'expression régulière de remplacement.
la source
\W
par[_\W]
(qui est utilisé dans la question) ou similaire supprimerait les soulignés.Toutes les réponses actuelles ont encore des bizarreries, la meilleure chose que j'ai pu trouver était:
Voici un exemple qui capture toutes les touches que j'ai pu trouver sur le clavier:
Sorties: '123abcABC'
la source
input.replace(/\W/g, '')
laisse dans_
une chaîne. @Deminetix a raisonstring.replace(/[^A-Za-z0-9]/g, '');
fonctionne mieux car il supprime tous les caractères non alphanumériques de la chaîne.Le problème n'est pas avec la façon dont vous remplacez les caractères, le problème est avec la façon dont vous entrez la chaîne.
Il est seulement la première barre oblique inverse dans l'entrée qui est un caractère de barre oblique inverse, les autres font partie des caractères de contrôle
\r
,\b
,\f
et\n
.Comme ces barres obliques inverses ne sont pas des caractères séparés, mais font partie de la notation pour écrire un seul caractère de contrôle, elles ne peuvent pas être supprimées séparément. C'est-à-dire que vous ne pouvez pas supprimer la barre oblique inverse
\n
car ce ne sont pas deux caractères distincts, c'est la façon dont vous écrivez le caractère de contrôleLF
ou le saut de ligne .Si vous souhaitez réellement transformer cette entrée en sortie souhaitée, vous devrez remplacer chaque caractère de contrôle par la lettre correspondante, par exemple remplacer le caractère
\n
par le caractèren
.Pour remplacer un caractère de contrôle, vous devez utiliser un jeu de caractères comme
[\r]
, comme cela\r
a une signification spéciale dans une expression régulière:Démo: http://jsfiddle.net/SAp4W/
la source
vous pouvez essayer cette expression régulière:
la source
Cela supprime tous les caractères non alphanumériques, préserve la capitalisation et préserve les espaces entre les mots.
la source
Voici un exemple que vous pouvez utiliser,
la source
Si vous voulez avoir cette
\\test\red\bob\fred\new
chaîne, vous devez échapper à toutes les barres obliques inverses (\
). Lorsque vous écrivez,\\test\\red\\bob\\fred\\new
votre chaîne contient en fait des barres obliques inverses simples. Vous pouvez être sûr de l'impression de votre chaîne.Donc, si les barres obliques inverses dans votre chaîne sont échappées,
myString.replace(/\W/g,'')
cela fonctionnera normalement.la source