wake-up-neo.net

Entfernen Sie keine alphanumerischen Zeichen aus der Zeichenfolge. Probleme mit dem Zeichen [\]

Ich möchte die folgende Zeichenfolge in die bereitgestellte Ausgabe konvertieren. 

Input:  "\\test\red\bob\fred\new"
Output: "testredbobfrednew"

Ich habe keine Lösung gefunden, die Sonderzeichen wie \r, \n, \b usw. behandelt.

Grundsätzlich möchte ich nur etwas loswerden, das nicht alphanumerisch ist. Hier ist was ich probiert habe ...

Attempt 1: "\\test\red\bob\fred\new".replace(/[_\W]+/g, "");
Output 1:  "testedobredew"

Attempt 2: "\\test\red\bob\fred\new".replace(/['`[email protected]#$%^&*()_|+-=?;:'",.<>\{\}\[\]\\\/]/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"
170
Bobby Cannon

Nicht-alphanumerische Zeichen entfernen

Das Folgende ist der/eine korrekte Regex, um nicht-alphanumerische Zeichen aus einer Eingabezeichenfolge zu entfernen:

input.replace(/\W/g, '')

Beachten Sie, dass \W das Äquivalent von [^0-9a-zA-Z_] ist - es enthält den Unterstrich. Um auch Unterstriche zu entfernen, verwenden Sie z.

input.replace(/[^0-9a-z]/gi, '')

Die Eingabe ist fehlerhaft

Da die Testzeichenfolge verschiedene Escape-Zeichen enthält, die keine alphanumerischen Zeichen sind, werden sie entfernt.

Ein Backslash in der Zeichenfolge muss entkommen, wenn er wörtlich genommen werden soll:

"\\test\\red\\bob\\fred\\new".replace(/\W/g, '')
"testredbobfrednew" // output

Umgang mit fehlerhaften Zeichenfolgen

Wenn Sie die Eingabezeichenfolge nicht richtig entschlüsseln können (warum nicht?) Oder von einer Art nicht vertrauenswürdiger/falsch konfigurierter Quelle stammen, können Sie Folgendes tun:

JSON.stringify("\\test\red\bob\fred\new").replace(/\W/g, '')
"testredbobfrednew" // output

Beachten Sie, dass die Json-Darstellung einer Zeichenfolge die Anführungszeichen enthält:

JSON.stringify("\\test\red\bob\fred\new")
""\\test\red\bob\fred\new""

Sie werden aber auch durch den Regex ersetzt.

364
AD7six

Alle aktuellen Antworten haben immer noch Macken, das Beste, was ich finden konnte, war:

string.replace(/[^A-Za-z0-9]/g, '');

Hier ist ein Beispiel, das alle Tasten auf der Tastatur erfasst:

var string = '123abcABC-_*([email protected]#$%^&*()_-={}[]:\"<>,.?/~`';
var stripped = string.replace(/[^A-Za-z0-9]/g, '');
console.log(stripped);

Ausgänge: '123abcABC'

44
Deminetix

Das Problem liegt nicht darin, wie Sie die Zeichen ersetzen, sondern wie Sie die Zeichenfolge eingeben.

Es ist nur der erste Backslash in der Eingabe, der ein Backslash-Zeichen ist. Die anderen sind Teil der Steuerzeichen \r, \b, \f und \n.

Da diese umgekehrten Schrägstriche keine separaten Zeichen sind, sondern Teil der Notation zum Schreiben einzelner Steuerzeichen sind, können sie nicht separat entfernt werden. Das heißt Sie können den Backslash nicht aus \n entfernen, da es sich nicht um zwei separate Zeichen handelt, sondern um das Steuerzeichen LF oder line feed.

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. Ersetzen Sie das Zeichen \n durch das Zeichen n.

Um ein Steuerzeichen zu ersetzen, müssen Sie einen Zeichensatz wie [\r] verwenden, da \r in einem regulären Ausdruck eine besondere Bedeutung hat:

var input = "\\test\red\bob\fred\new";

var output = input
    .replace(/[\r]/g, 'r')
    .replace(/[\b]/g, 'b')
    .replace(/[\f]/g, 'f')
    .replace(/[\n]/g, 'n')
    .replace(/\\/g, '');

Demo: http://jsfiddle.net/SAp4W/

10
Guffa

sie können diese Regex versuchen:

value.replace(/[\W_-]/g, '');
5
myrcutio

Dadurch werden alle nicht alphanumerischen Zeichen entfernt, die Großschreibung wird beibehalten und Leerzeichen zwischen Wörtern bleiben.

function alpha_numeric_filter (string) {

  const alpha_numeric = Array.from('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' + ' ')

  const json_string = JSON.stringify(string)

  let filterd_string = ''

  for (let i = 0; i < json_string.length; i++) {

    let char = json_string[i]
    let index = alpha_numeric.indexOf(char)
    if (index > -1) {
      filterd_string += alpha_numeric[index]
    }

  }

  return filterd_string

}

const input = "\\test\red\bob\fred\new"
console.log(alpha_numeric_filter(input)) //=> testredbobfrednew

const complex_string = "/_&_This!&!! [email protected]#$% a%^&*() Sentence+=-[]{} 123:;\|\\]||~`/.,><"
console.log(alpha_numeric_filter(complex_string)) //=> This is a Sentence 123
0
Flavio