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.

James Jeffery
źródło

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, ' ');
Darin Dimitrov
źródło
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
źródło
Wydaje
@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.

favo
źródło
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, ' ')

aayushi
źródło
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

Youssef AbouEgla
źródło
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

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

Juan Gaitán
źródło
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

aloisdg przenosi się na codidact.com
źródło