Comment remplacer un guillemet double par un guillemet double escape-char dans une chaîne en utilisant javascript?

Disons que j'ai une variable de chaîne (var str) comme suit -

mec, il a totalement dit que " tu es Rock!"

Maintenant, si je dois le faire ressembler comme suit -

mec, il a totalement dit que " vous Rock!"

Comment puis-je accomplir cela en utilisant la fonction JavaScript replace()?

str.replace(""","\""); ne fonctionne pas si bien. Il donne unterminated string literal erreur.

Maintenant, si la phrase ci-dessus devait être stockée dans une base de données SQL, disons dans MySQL comme LONGTEXT (ou tout autre type de données VARCHAR-ish), quelles autres optimisations de chaînes je dois effectuer? Les guillemets et les virgules ne sont pas très conviviaux avec les chaînes de requête. J'apprécierais également quelques suggestions à ce sujet.

29
demandé sur Samik Sengupta 2012-07-17 09:58:38

4 réponses

Vous devez utiliser une expression régulière globale pour cela, essayez-le de cette façon

str.replace(/"/g, '\\"');

Consultez la syntaxe regex et les options pour la fonction replace ici:

Http://www.regular-expressions.info/javascript.html

50
répondu Willem D'Haeseleer 2012-07-17 06:11:17

, Essayez ceci:

str.replace("\"","\\\""); // (escape backslashes and embedded double-quotes)

Ou, utilisez des guillemets simples pour citer vos chaînes de recherche et de remplacement:

str.replace('"','\\"');   // (still need to escape the backslash)

UPDATE: comme indiqué par helmus, si le premier paramètre passé à .replace() est une chaîne, il ne remplacera que la première occurrence. Pour remplacer globalement, vous devez passer une expression rationnelle avec l'indicateur g (global):

str.replace(/"/g,"\\\"");
// or
str.replace(/"/g,'\\"');

Mais pourquoi faites-vous cela en JavaScript? Il est correct d'utiliser ces caractères d'échappement si vous avez un littéral de chaîne comme:

var str = "Dude, he totally said that \"You Rock!\"";

, Mais c'est nécessaire seulement dans un littéral de chaîne. Autrement dit, si votre variable JS est définie sur une valeur saisie par un utilisateur dans un champ de formulaire, vous n'avez pas besoin de cet échappement.

En ce qui concerne votre question sur le stockage d'une telle chaîne dans une base de données SQL, encore une fois, vous n'avez besoin d'échapper les caractères si vous intégrez un littéral de chaîne dans votre instruction SQL - et rappelez-vous que les caractères d'échappement qui s'appliquent dans SQL ne sont pas (généralement) les mêmes que pour JS. Vous feriez n'importe quel côté serveur d'échappement lié à SQL.

6
répondu nnnnnn 2012-07-17 06:18:58
var str = 'Dude, he totally said that "You Rock!"';
var var1 = str.replace(/\"/g,"\\\"");
alert(var1);
0
répondu F0G 2012-07-17 06:05:11

Les autres réponses fonctionneront pour la plupart des chaînes, mais vous pouvez finir par échapper une citation double déjà échappée, ce qui n'est probablement pas ce que vous voulez.

Pour fonctionner correctement, vous devrez échapper tous les antislashs, puis échapper tous les guillemets doubles, comme ceci:

var test_str = '"first \\" middle \\" last "';
var result = test_str.replace(/\\/g, '\\\\').replace(/\"/g, '\\"');

Selon la façon dont vous devez utiliser la chaîne, et les autres caractères échappés impliqués, cela peut encore avoir quelques problèmes, mais je pense que cela fonctionnera probablement dans la plupart des cas.

0
répondu derekmc 2018-05-14 03:53:15