Wyrażenie regularne: Dowolny znak, który NIE jest literą ani cyfrą


113

Próbuję znaleźć wyrażenie regularne, które będzie pasowało do każdego znaku, który nie jest literą ani cyfrą. Tak więc znaki takie jak (,, @, £, () itd ...

Po znalezieniu chcę go zastąpić spacją.

Jakakolwiek rada.

Odpowiedzi:


165

Aby dopasować coś innego niż litera lub cyfra, możesz spróbować tego:

[^a-zA-Z0-9]

I wymienić:

var str = 'dfj,dsf7lfsd .sdklfj';
str = str.replace(/[^A-Za-z0-9]/g, ' ');

17
\wdotyczy znaków Word i jest dokładnie tym samym, co [a-zA-Z0-9_](zauważ, że podkreślenie jest uważane za znak słowa.) ... więc skrót będzie wyglądał następującostr.replace(/[^\w]/g, ' ')
Joel Mellon

ale będzie zawierał też wiele liter Unicode! czy istnieje sposób na wykluczenie liter Unicode?
Clite Tailor

1
Aby dołączyć znaki Unicode, możesz użyć [^ \ p {L} 0-9]
Dave,

@Dave: Od 2018 roku nie można bez polyfill, najwyraźniej ... stackoverflow.com/questions/280712/javascript-unicode-regexes
Nickolay,

czy istnieje sposób, zamiast zastępować spacją ... zamienić na „\”, a po nim znak, który został zidentyfikowany? W ten sposób: zrób ten plik dfj, dsf7lfsd .sdklfj w tym pliku dfj \, dsf7lfsd \ .sdklfj?
CrazySpy

39

To wyrażenie regularne dopasowuje wszystko, co nie jest literą, cyfrą ani znakiem podkreślenia ( _).

\W

Na przykład w JavaScript:

"(,,@,£,() asdf 345345".replace(/\W/g, ' '); // Output: "          asdf 345345"


@sbmaxx Chcę zamienić wszystkie oprócz &, (,) te znaki. jak mogę dodać ten warunek w bieżącym wyrażeniu regularnym.
K Pal

17

Szukasz:

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

Spowoduje to zastąpienie wszystkich znaków niealfanumerycznych spacją.

Litera „g” na końcu zastępuje wszystkie wystąpienia.

Zamiast określać AZ (małymi literami) i AZ (wielka litera) można również używać w-rozróżniana opcja: /[^a-z0-9]/gi.


Czy będzie pasować również do przestrzeni? Potrzebuję przestrzeni do zachowania. Dzięki.
James Jeffery,

Znaki spacji pasowałyby, ale następnie zostałyby zastąpione znakami spacji, więc w efekcie pozostawiłoby je w spokoju (spacja pozostanie spacją).
jimbo


5

spróbuj zrobić str.replace (/ [^ \ w] /); Zastąpi wszystkie niealfabetyczne i liczby z twojego ciągu!

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


2
Robocza odpowiedź byłaby str.replace(/[^\w]/g, ' '). Jeśli nie dodasz /gflagi, zastąpi ona tylko pierwsze wystąpienie. A jeśli nie zdefiniujesz ciągu zastępczego, w tym miejscu spacja ' 'zostanie zastąpiona w undefinedkażdym miejscu. Wreszcie podkreślenia nie zostaną zastąpione, ponieważ pasują \w. Ta odpowiedź nie pasuje idealnie.
Julien Lirochon

4
  • Tylko litery dopasowania /[A-Z]/ig
  • Dopasuj wszystko, nie litery /[^A-Z]/ig
  • Tylko numer meczu /[0-9]/glub/\d+/g
  • Dopasuj wszystko, a nie liczbę /[^0-9]/glub/\D+/g
  • Dopasuj wszystko, co nie jest liczbą ani literą /[^A-Z0-9]/ig

Istnieją inne możliwe wzory


3

Tylko dla innych do zobaczenia:

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

usunie wszelkie znaki unicode niebędące literami i cyframi.

Źródło


Nie jestem pewien, skąd wzięły się dwa głosy za, ale w JavaScript (którego dotyczy to pytanie) nie ma replaceAll, a sekwencje znaków \p{..}właściwości nie są powszechnie stosowane.
Nickolay,

2

Czy próbowałeś str = str.replace(/\W|_/g,'');, zwróci łańcuch bez żadnego znaku i możesz określić, czy jakiś specjalny znak za kreską potoku |również je złapie.

var str = "1324567890abc§$)% John Doe #$@'.replace(/\W|_/g, ''); to wróci str = 1324567890abcJohnDoe

lub poszukaj cyfr i liter i zamień je na pusty ciąg („”):

var str = "1324567890abc§$)% John Doe #$@".replace(/\w|_/g, ''); to wróci str = '§$)% #$@';


1

Aby dopasować coś innego niż litera, cyfra lub litera ze znakami diakrytycznymi, émożesz spróbować tego:

[^\wÀ-úÀ-ÿ]

I wymienić:

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

Zainspirowany górnym postem z obsługą znaków diakrytycznych

źródło

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.