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.

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, ' ');

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"

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.


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, ' ')


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


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 = '§$)% #$@';


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


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.