2012-10-22 22 views
23

Ich möchte alle Sonderzeichen und Leerzeichen aus einer Zeichenfolge entfernen und durch Unterstreichung ersetzen. Der String istentfernen Sie Sonderzeichen und zusätzliche Leerzeichen und ersetzen Sie sie durch Unterstreichen mit der Methode replace

var str = "hello world & hello universe"; 

Ich habe das jetzt, die nur Leerzeichen

 str.replace(/\s/g, "_"); 

Das Ergebnis I ist hello_world_&_hello_universe bekommen ersetzt, aber ich würde entfernen wie auch die Sonderzeichen.

Ich versuchte dies str.replace(/[^a-zA-Z0-9]\s/g, "_"), aber das hilft nicht.

Antwort

50

Ihr regulärer Ausdruck [^a-zA-Z0-9]\s/g besagt, dass ein beliebiges Zeichen, das keine Zahl oder ein Buchstabe gefolgt von einem Leerzeichen ist, übereinstimmt.

Entfernen Sie die \ s und Sie sollten bekommen, was Sie wollen, wenn Sie ein _ für jedes Sonderzeichen wollen.

var newString = str.replace(/[^A-Z0-9]/ig, "_"); 

dass in hello_world___hello_universe

führt Wenn Sie es einzelnen Unterstrichen a + nutzen zu wollen

var newString = str.replace(/[^A-Z0-9]+/ig, "_"); 

mehrere übereinstimmen, die zur Folge haben wird in hello_world_hello_universe

2

Entfernen Sie die \s aus Ihrem neuen Regex und es sollte funktionieren - Leerzeichen ist bereits in "alles außer alphanumerischen" enthalten.

Beachten Sie, dass Sie eine + nach der ] hinzufügen möchten, damit Sie Sequenzen von mehr als einem Unterstrich nicht erhalten. Sie können auch auf .replace(/^_+|_+$/g,'') ketten, um Unterstriche am Anfang oder am Ende des Strings abzuschneiden.

+0

Warum trennen rufen 'ersetzen 'wenn Sie' + 'im ersten Regex hinzufügen können? – MBO

+0

Weil ... guter Punkt. Ich denke an etwas anderes. Trotzdem könntest du eine "trim" -artige Regex-Kette verwenden. –

Verwandte Themen