2012-02-02 14 views
17

ho provato questo:jQuery - Sostituire tutte le parentesi in una stringa

mystring= mystring.replace(/"/g, "").replace(/'/g, "").replace("(", "").replace(")", ""); 

Funziona per tutte le virgolette doppie e singole, ma per parentesi, questo sostituisce solo la prima parentesi nella stringa.

Come posso farlo funzionare per sostituire tutte le parentesi nella stringa utilizzando JavaScript? O sostituire tutti i caratteri speciali in una stringa?

+0

Questo non è jQuery, il suo javascr solo standard ipt – rickyduck

+0

oops! spero che tu capisca il requisito, ho bisogno di ottenere questo fatto da jquery o javascript standard. saresti in grado di aiutarmi? – HaBo

risposta

26

provare quanto segue:

mystring= mystring.replace(/"/g, "").replace(/'/g, "").replace(/\(|\)/g, ""); 

Un po 'di REGEX per afferrare quei fastidiosi parentesi.

6

Si dovrebbe essere in grado di farlo in una singola dichiarazione di sostituzione.

mystring = mystring.replace(/["'\(\)]/g, ""); 

se si sta cercando di sostituire tutte le speciali caratteri si potrebbe desiderare di utilizzare un modello come questo.

mystring = mystring.replace(/\W/g, ""); 

Che sostituirà qualsiasi carattere non di parole.

0

Che dovrebbe funzionare:

mystring= mystring.replace(/"/g, "").replace(/'/g, "").replace(/\(/g, "").replace(/\)/g, ""); 
21

si dovrebbe usare qualcosa di più simile a questo:

mystring = mystring.replace(/["'()]/g,""); 

La ragione per cui non funzionava per gli altri è perché si è dimenticato l'argomento "globale" (g)

nota che [...] è una classe di caratteri. qualsiasi cosa tra quelle parentesi viene sostituita.

+0

Non è necessario sfuggire alle parentesi? –

+1

@MattFellows non mentre è in una classe di caratteri. (Tendo a mettere caratteri speciali nelle classi di caratteri solo per non doverli sfuggire ... lo rende più leggibile almeno per me: P) –

+1

@MattFellows Aggiungerò comunque che le eccezioni a questo sono '[' , ']' e '\\' che hanno bisogno di essere sfuggiti. –

0

Ecco perché per sostituire più occorrenze è necessario utilizzare un'espressione regolare come stringa di ricerca in cui si utilizza una stringa letterale. Come hai trovato, la ricerca per stringhe sostituirà solo la prima occorrenza.

2

Puoi anche usare una normale esperienza se stai cercando una parentesi, devi solo scappare da loro.

mystring = mystring.replace(/\(|\)/g, ''); 

Questo eliminerà tutti ( e ) in tutta la stringa.

0

Il metodo di sostituzione basato su stringa non verrà sostituito globalmente. Pertanto, probabilmente si desidera utilizzare il metodo di sostituzione basato su espressioni regolari.Va notato:

Hai bisogno di fuggire ( e ) in cui sono utilizzati per il gruppo corrispondente:

mystring= mystring.replace(/"/g, "").replace(/'/g, "").replace(/\(/g, "").replace(/\)/g, ""); 
+0

Ma non esiste il concetto di "gruppo" per la versione non regex di 'replace' che l'OP sta usando. –

+0

Questo è vero, ma per ottenere la sostituzione globale è necessario utilizzare una regex, credo - ecco perché ho suggerito una regex, e quindi la mia affermazione è vera. –

+0

È vero, ma è solo un IMO fuorviante in quanto il problema del raggruppamento non è stato la causa del problema originale dell'OP. Penso solo che valga la pena menzionare che stai convertendo i suoi 'replace's basati su stringhe in' replace's basati su espressioni regolari. –

1

Un solo sostituire lo farà:

"\"a(b)c'd{e}f[g]".replace(/[\(\)\[\]{}'"]/g,"") 
Problemi correlati