Regulärer Ausdruck: Jedes Zeichen, das KEIN Buchstabe oder keine Zahl ist

112

Ich versuche, den regulären Ausdruck herauszufinden, der mit jedem Zeichen übereinstimmt, das kein Buchstabe oder keine Zahl ist. Also Zeichen wie (,, @, £, () etc ...

Einmal gefunden, möchte ich es durch ein Leerzeichen ersetzen.

Irgendein Rat.

James Jeffery
quelle

Antworten:

165

Um etwas anderes als Buchstaben oder Zahlen zu finden, können Sie Folgendes versuchen:

[^a-zA-Z0-9]

Und zu ersetzen:

var str = 'dfj,dsf7lfsd .sdklfj';
str = str.replace(/[^A-Za-z0-9]/g, ' ');
Darin Dimitrov
quelle
17
\wist für [a-zA-Z0-9_]Wortzeichen und ist genau das gleiche wie (beachten Sie, dass der Unterstrich als Wortzeichen betrachtet wird.) ... also wäre die Abkürzungstr.replace(/[^\w]/g, ' ')
Joel Mellon
aber es wird auch viele Unicode-Buchstaben enthalten! Gibt es eine Möglichkeit, Unicode-Buchstaben auszuschließen?
Clite Tailor
1
Um Unicode-Zeichen einzuschließen, können Sie [^ \ p {L} 0-9]
Dave
@ Dave: Ab 2018 kann man anscheinend nicht ohne Polyfill ... stackoverflow.com/questions/280712/javascript-unicode-regexes
Nickolay
Gibt es eine Möglichkeit, anstatt sich durch ein Leerzeichen zu ersetzen ... durch "\" zu ersetzen, gefolgt von dem identifizierten Zeichen? So: mache dieses dfj, dsf7lfsd .sdklfj zu diesem dfj \, dsf7lfsd \ .sdklfj?
CrazySpy
38

Dieser reguläre Ausdruck entspricht allem, was kein Buchstabe, keine Ziffer oder kein Unterstrich ( _) ist.

\W

Zum Beispiel in JavaScript:

"(,,@,£,() asdf 345345".replace(/\W/g, ' '); // Output: "          asdf 345345"
sbmaxx
quelle
Ich glaube, er sucht nach / (_ | \ W) / g, um etwas zu finden, das nicht mit einer Ziffer oder einem Buchstaben (englische Sprache)
übereinstimmt
@sbmaxx Ich möchte alle außer &, (,) diese Zeichen ersetzen. Wie könnte ich diese Bedingung in die aktuelle Regex einfügen?
K Pal
17

Du suchst nach:

var yourVar = '1324567890abc§$)%';
yourVar = yourVar.replace(/[^a-zA-Z0-9]/g, ' ');

Dies ersetzt alle nicht alphanumerischen Zeichen durch ein Leerzeichen.

Das "g" am Ende ersetzt alle Vorkommen.

Anstatt az (Kleinbuchstaben) und AZ (Großbuchstaben) anzugeben, können Sie auch die Option verwenden, bei der zwischen Groß- und Kleinschreibung unterschieden wird : /[^a-z0-9]/gi.

favo
quelle
Passt es auch zu Räumen? Ich brauche Räume, die behalten werden müssen. Vielen Dank.
James Jeffery
Leerzeichen würden übereinstimmen, dann aber durch Leerzeichen ersetzt, sodass sie praktisch in Ruhe gelassen würden (ein Leerzeichen bleibt ein Leerzeichen).
Jimbo
5

versuche str.replace (/ [^ \ w] /); Es ersetzt alle Nicht-Alphabete und Zahlen aus Ihrer Zeichenfolge!

Bearbeiten 1: str.replace(/[^\w]/g, ' ')

Aayushi
quelle
2
Eine funktionierende Antwort wäre str.replace(/[^\w]/g, ' '). Wenn Sie kein /gFlag einfügen, wird nur das erste Vorkommen ersetzt. Und wenn Sie keine Ersatzzeichenfolge definieren, hier ein Leerzeichen ' ', wird diese undefinedüberall ersetzt. Schließlich werden Unterstriche nicht ersetzt, weil sie übereinstimmen \w. Diese Antwort passt nicht perfekt.
Julien Lirochon
3

Nur für andere zu sehen:

someString.replaceAll("([^\\p{L}\\p{N}])", " ");

entfernt alle Nicht-Buchstaben- und Nicht-Zahlen-Unicode-Zeichen.

Quelle

Richie
quelle
Ich bin mir nicht sicher, woher die beiden Upvotes stammen, aber in JavaScript (worum es bei dieser Frage geht) gibt es kein Nein replaceAll, und die Escape- \p{..}Eigenschaften sind nicht weit verbreitet.
Nickolay
2

Haben Sie es versucht str = str.replace(/\W|_/g,'');, wird eine Zeichenfolge ohne Zeichen zurückgegeben, und Sie können angeben, ob nach der Pipe-Leiste ein bestimmtes Zeichen vorhanden ist |, um sie ebenfalls abzufangen.

var str = "1324567890abc§$)% John Doe #$@'.replace(/\W|_/g, ''); es wird zurückkehren str = 1324567890abcJohnDoe

oder suchen Sie nach Ziffern und Buchstaben und ersetzen Sie sie durch leere Zeichenfolgen (""):

var str = "1324567890abc§$)% John Doe #$@".replace(/\w|_/g, ''); es wird zurückkehren str = '§$)% #$@';

Juan Gaitán
quelle
2
  • Nur übereinstimmende Buchstaben /[A-Z]/ig
  • Kombiniere alles, was keine Buchstaben sind /[^A-Z]/ig
  • Nur Matchnummer /[0-9]/goder/\d+/g
  • Passen Sie alles an, was nicht Nummer /[^0-9]/goder ist/\D+/g
  • Passen Sie alles an, was nicht Zahl oder Buchstabe ist /[^A-Z0-9]/ig

Es gibt andere mögliche Muster

Youssef AbouEgla
quelle
1

Um etwas anderes als Buchstaben oder Zahlen oder Buchstaben mit Diakritika wie édiesen abzugleichen, können Sie Folgendes versuchen:

[^\wÀ-úÀ-ÿ]

Und zu ersetzen:

var str = 'dfj,dsf7é@lfsd .sdklfàj1';
str = str.replace(/[^\wÀ-úÀ-ÿ]/g, '_');

Inspiriert vom Top Post mit Unterstützung für Diakritika

Quelle

aloisdg wechselt zu codidact.com
quelle