Espressione regolare: qualsiasi carattere che NON sia una lettera o un numero


112

Sto cercando di capire l'espressione regolare che corrisponderà a qualsiasi carattere che non sia una lettera o un numero. Quindi caratteri come (,, @, £, () ecc ...

Una volta trovato, voglio sostituirlo con uno spazio vuoto.

Qualche consiglio.

Risposte:


165

Per abbinare qualcosa di diverso dalla lettera o dal numero potresti provare questo:

[^a-zA-Z0-9]

E per sostituire:

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

17
\wè per i caratteri di Word ed è esattamente lo stesso di [a-zA-Z0-9_](notare che il trattino basso è considerato un carattere di parola.) ... quindi la stenografia sarebbestr.replace(/[^\w]/g, ' ')
Joel Mellon

ma includerà anche molte lettere Unicode! c'è un modo per escludere le lettere Unicode?
Clite Tailor

1
Per includere caratteri Unicode, puoi utilizzare [^ \ p {L} 0-9]
Dave

@Dave: A partire dal 2018 non puoi fare a meno di un polyfill, apparentemente ... stackoverflow.com/questions/280712/javascript-unicode-regexes
Nickolay

c'è un modo, invece di replicare con uno spazio ... sostituire con "\" seguito dal carattere che è stato identificato? In questo modo: trasforma questo dfj, dsf7lfsd .sdklfj in questo dfj \, dsf7lfsd \ .sdklfj?
CrazySpy

38

Questa espressione regolare corrisponde a tutto ciò che non è una lettera, una cifra o un carattere di sottolineatura ( _).

\W

Ad esempio in JavaScript:

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

Credo che stia cercando / (_ | \ W) / g, per abbinare qualcosa che non sia una cifra o una lettera (lingua inglese)
kennebec

@sbmaxx Voglio sostituire tutti tranne &, (,) questi caratteri. come potrei aggiungere questa condizione nella regex corrente.
K Pal

17

Stai cercando:

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

Sostituisce tutti i caratteri non alfanumerici con uno spazio.

La "g" alla fine sostituisce tutte le occorrenze.

Invece di specificare az (minuscolo) e AZ (maiuscolo) è anche possibile utilizzare l'in-sensitive-opzione: /[^a-z0-9]/gi.


Abbinerà anche gli spazi? Ho bisogno di spazi da mantenere. Grazie.
James Jeffery,

I caratteri spazio corrisponderebbero, ma poi sarebbero sostituiti da caratteri spazio, quindi in effetti li lascerebbe soli (uno spazio rimarrà uno spazio).
jimbo


5

prova a fare str.replace (/ [^ \ w] /); Sostituirà tutti i non alfabeti e numeri dalla tua stringa!

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


2
Una risposta funzionante sarebbe str.replace(/[^\w]/g, ' '). Se non includi /gflag, sostituirà solo la prima occorrenza. E se non si definisce una stringa di sostituzione, qui uno spazio vuoto ' ', sostituirà undefineddappertutto. Infine, i trattini bassi non verranno sostituiti perché corrispondono \w. Questa risposta non è perfetta.
Julien Lirochon

3

Solo perché gli altri possano vedere:

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

rimuoverà tutti i caratteri Unicode non alfabetici e non numerici.

fonte


Non sono sicuro da dove provengano i due voti positivi, ma in JavaScript (di cui tratta questa domanda) non c'è replaceAll, e gli \p{..}escape di proprietà non sono ampiamente implementati.
Nickolay

3
  • Trova solo lettere /[A-Z]/ig
  • Abbina tutto ciò che non è lettere /[^A-Z]/ig
  • Solo numero di corrispondenza /[0-9]/go/\d+/g
  • Trova qualsiasi cosa non numero /[^0-9]/go/\D+/g
  • Trova qualsiasi cosa diversa da numeri o lettere /[^A-Z0-9]/ig

Ci sono altri possibili modelli


2

Hai provato str = str.replace(/\W|_/g,'');restituirà una stringa senza alcun carattere e puoi specificare se qualsiasi carattere speciale dopo la barra del tubo |per catturarli.

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

oppure cerca cifre e lettere e sostituiscile con una stringa vuota (""):

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


1

Per abbinare qualcosa di diverso da una lettera o un numero o una lettera con segni diacritici come épotresti provare questo:

[^\wÀ-úÀ-ÿ]

E per sostituire:

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

Ispirato al primo post con supporto per segni diacritici

fonte

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.