Ich möchte die folgende Zeichenfolge in die bereitgestellte Ausgabe konvertieren.
Input: "\\test\red\bob\fred\new"
Output: "testredbobfrednew"
Ich habe festgestellt , keine Lösung , die Sonderzeichen behandelt wie \r
, \n
, \b
usw.
Grundsätzlich möchte ich nur alles loswerden, was nicht alphanumerisch ist. Folgendes habe ich versucht ...
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"
Ein weiterer Versuch mit mehreren Schritten
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]/ , "");
}
mit Ergebnissen
Attempt 1: cleanID("\\test\red\bob\fred\new");
Output 1: "BTESTREDOBFREDNEW"
Jede Hilfe wäre dankbar.
Arbeitslösung:
Final Attempt 1: return JSON.stringify("\\test\red\bob\fred\new").replace( /\W/g , '');
Output 1: "testredbobfrednew"
javascript
regex
Bobby Cannon
quelle
quelle
var Input = "\\test\red\bob\fred\new"
Diese Zeichenfolge enthält kein "Rot". Ihr erster Versuch ist also korrekt. Testen Sie gegen den Wurf"\\\\test\\red\\bob\\fred\\new"
?/[^\w\s]+/gi
Versuche dies.Antworten:
Nicht alphanumerische Zeichen entfernen
Das Folgende ist der / ein korrekter regulärer Ausdruck, um nicht alphanumerische Zeichen aus einer Eingabezeichenfolge zu entfernen:
Beachten Sie, dass dies
\W
dem Äquivalent von[^0-9a-zA-Z_]
- entspricht und den Unterstrich enthält. Um auch Unterstriche zu entfernen, verwenden Sie zB:Die Eingabe ist fehlerhaft
Da die Testzeichenfolge verschiedene maskierte Zeichen enthält, die nicht alphanumerisch sind, werden sie entfernt.
Ein Backslash in der Zeichenfolge muss maskiert werden, wenn er wörtlich genommen werden soll:
Umgang mit fehlerhaften Saiten
Wenn Sie der Eingabezeichenfolge nicht korrekt entkommen können (warum nicht?) Oder wenn sie von einer nicht vertrauenswürdigen / falsch konfigurierten Quelle stammt, können Sie Folgendes tun:
Beachten Sie, dass die JSON-Darstellung einer Zeichenfolge die Anführungszeichen enthält:
Sie werden aber auch durch den Ersatz-Regex entfernt.
quelle
\W
durch[_\W]
(was in der Frage verwendet wird) oder ähnliches Unterstriche entfernen.Alle aktuellen Antworten haben immer noch Macken. Das Beste, was ich mir einfallen lassen konnte, war:
Hier ist ein Beispiel, das jede Taste erfasst, die ich auf der Tastatur finden konnte:
Ausgaben: '123abcABC'
quelle
input.replace(/\W/g, '')
Blätter in der_
in einem String. @Deminetixstring.replace(/[^A-Za-z0-9]/g, '');
funktioniert besser, da alle nicht alphanumerischen Zeichen aus dem String entfernt werden.Das Problem liegt nicht darin, wie Sie die Zeichen ersetzen, sondern darin, wie Sie die Zeichenfolge eingeben.
Es ist nur der erste Backslash im Eingang, der ein umgekehrter Schrägstrich ist, sind die anderen Teil der Steuerzeichen
\r
,\b
,\f
und\n
.Da diese Backslashes keine separaten Zeichen sind, sondern Teil der Notation zum Schreiben einzelner Steuerzeichen, können sie nicht separat entfernt werden. Das heißt, Sie können den Backslash nicht entfernen,
\n
da es sich nicht um zwei separate Zeichen handelt. Auf diese Weise schreiben Sie das SteuerzeichenLF
oder den Zeilenvorschub .Wenn Sie diese Eingabe tatsächlich in die gewünschte Ausgabe umwandeln möchten, müssen Sie jedes Steuerzeichen durch den entsprechenden Buchstaben ersetzen, z. B. das Zeichen
\n
durch das Zeichen ersetzenn
.So ersetzen Sie ein Steuerzeichen müssen einen Zeichensatz wie verwenden
[\r]
, als\r
eine besondere Bedeutung in einem regulären Ausdruck hat:Demo: http://jsfiddle.net/SAp4W/
quelle
Sie können diesen regulären Ausdruck ausprobieren:
quelle
Dadurch werden alle nicht alphanumerischen Zeichen entfernt, die Groß- und Kleinschreibung beibehalten und Leerzeichen zwischen Wörtern beibehalten.
quelle
Hier ist ein Beispiel, das Sie verwenden können:
quelle
Wenn Sie diese
\\test\red\bob\fred\new
Zeichenfolge haben möchten , sollten Sie alle Backslashes (\
) maskieren . Wenn Sie schreiben,\\test\\red\\bob\\fred\\new
enthält Ihre Zeichenfolge tatsächlich einzelne Backslashes. Sie können sicher sein, dass Sie Ihre Zeichenfolge drucken.Wenn also Backslashes in Ihrer Zeichenfolge maskiert
myString.replace(/\W/g,'')
werden, funktioniert dies normal.quelle