2017-12-18 4 views
1

In Javascript möchte ich alle nicht alphanumerischen Zeichen aussortieren. Hier ist mein Code:Reguläre Ausdrücke - Kombinieren von Mustern

function (inpt) { 
     return inpt.replace(/[^\w]/gi, "").replace(/_/g, ""); 
    } 

Dieser Code funktioniert 100% korrekt. Entfernt alle nicht alphanumerischen Zeichen.

Die \w erlaubt immer noch Unterstreichung, weshalb ich zwei replace Aussagen zusammen verkettet habe.

Ich versuchte dann die regulären Ausdrücke wie folgt zu kombinieren, und jetzt werden Unterstriche nicht mehr gefiltert.

function (inpt) { 
     return inpt.replace(/[^\w_]/gi, "");  // note: added _ 
    } 

Was mache ich falsch?

+1

Verwenden Sie stattdessen '[\ W_]'. Die i-Flagge wird nicht benötigt. –

+1

Es heißt "nicht \ w" oder "nicht _" – epascarello

+0

@epascarello - danke, ich wünschte, ich könnte deinen Kommentar mehr als einmal abstimmen. (-: – Joe

Antwort

2

Ihr [^\w_] Muster repräsentiert einen negated character class, der mit jedem Zeichen außer einem Wort (Buchstabe, Ziffer oder _) und _ Zeichen übereinstimmt.

Das [^\w] Muster entspricht \W. Sie können also

/[\W_]/g 

Siehe regex demo. Hier

ist [\W_] ein positivecharacter class, die entweder ein Nicht-Wort char oder ein _ übereinstimmt.

JS Demo:

var str = "some%_1string*"; 
 
console.log(str.replace(/[\W_]+/g, ''));

Beachten Sie, dass .replace(/[\W_]+/g, '') entfernt die Zeichen Sie ein bisschen schneller als .replace(/[\W_]/g, '') müssen seit + quantifier 1+ aufeinanderfolgenden Vorkommen von passenden Zeichen entspricht und entfernt sie alle in einem gehen.

+0

Danke. Ich wurde durch das '^' verwirrt ... dachte, es könnte der Anfang der Zeichenfolge gewesen sein. Wenn Sie Epascarellos Kommentar in Ihre Antwort kombinieren, kann ich Ihre Antwort als endgültig akzeptieren. – Joe

+0

Dziękuję Ci! !!! – Joe

+0

@Joe Nie ma za co :) –