Sostituisci metodo non funziona

Voglio sostituire le citazioni intelligenti come ' , ' , e alle quotazioni regolari. Inoltre, volevo sostituire © , ® e . Ho usato il seguente codice. Ma non aiuta. Gentilmente aiutami a risolvere questo problema.

 str.replace(/[“”]/g, '"'); str.replace(/['']/g, "'"); 

Uso:

 str = str.replace(/[“”]/g, '"'); str = str.replace(/['']/g, "'"); 

o per farlo in una dichiarazione:

 str = str.replace(/[“”]/g, '"').replace(/['']/g,"'"); 

In JavaScript (come in molti altri linguaggi) le stringhe sono immutabili – i metodi di “sostituzione” delle stringhe in realtà restituiscono semplicemente la nuova stringa invece di modificare la stringa sul posto.

La voce di riferimento JavaScript MDN per gli stati di replace :

Restituisce una nuova stringa con alcune o tutte le corrispondenze di un modello sostituite da una sostituzione.

Questo metodo non modifica l’object String su cui è chiamato. Restituisce semplicemente una nuova stringa.

sostituire restituire la stringa risultante

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

L’OP non dice perché non funziona, ma sembra che ci siano problemi legati alla codifica del file. Se ho un file codificato ANSI e lo faccio:

 var s = "“This is a test” 'Another test'"; s = s.replace(/[“”]/g, '"').replace(/['']/g,"'"); document.writeln(s); 

Ottengo:

 "This is a test" "Another test" 

Ho convertito la codifica in UTF-8, corretto le virgolette intelligenti (che si sono interrotte quando ho cambiato la codifica), quindi convertito in ANSI e il problema è andato via.

Si noti che quando ho copiato e incollato le virgolette doppie e singole da questa pagina nel mio documento di prova (codificato ANSI) e ho eseguito questo codice:

 var s = "“This is a test” 'Another test'"; for (var i = 0; i < s.length; i++) { document.writeln(s.charAt(i) + '=' + s.charCodeAt(i)); } 

Ho scoperto che tutte le citazioni intelligenti si presentavano come ? = 63 ? = 63 .

Quindi, per l'OP, determinare dove si trovano le virgolette intelligenti e accertarsi che siano i codici dei caratteri che si aspettano che siano. Se non lo sono, prendere in considerazione la modifica della codifica della sorgente in modo che arrivino come “ = 8220 ” = 8221 , ” = 8221 , ' = 8216 e ' = 8217 . Usa il mio ciclo per esaminare l'origine, se le virgolette intelligenti vengono visualizzate con qualsiasi valore charCodeAt() diverso da quelli che ho elencato, replace() non funzionerà come scritto.

Per sostituire tutte le virgolette normali con virgolette intelligenti, sto usando una funzione simile. È necessario specificare il CharCode in quanto in alcuni computer / browser le impostazioni predefinite potrebbero identificare i caratteri semplici in modo diverso (“”, “, ‘,’).

Usando il CharCode con chiamata il carattere ASCII, che eliminerà il margine di errore su diversi browser e sistemi operativi. Questo è utile anche per l’uso bilingue (accenti, ecc.).

Per sostituire le virgolette intelligenti con SINGLE QUOTES

 function unSmartQuotify(n){ var name = n; var apos = String.fromCharCode(39); while (n.indexOf("'") > -1) name = name.replace("'" , apos); return name; } 

Per trovare gli altri valori ASCII che potrebbero essere necessari. Controlla qui