Je veux supprimer le ""
autour d'une chaîne.
par exemple, si la chaîne est: "I am here"
alors je veux sortir uniquement I am here
.
javascript
regex
ankur
la source
la source
str = str.replace(/"/g,"");
str = str.replace(/^"|"$/g, '');
remplace les guillemets. La réponse de Mr_Green remplacera globalement TOUS"
ce qui n'est pas bonRéponses:
En supposant:
Cela devrait faire l'affaire ... (si votre objectif est de remplacer tous les guillemets doubles).
Voici comment ça fonctionne:
['"]
est une classe de caractères, correspond à des guillemets simples et doubles. vous pouvez le remplacer par"
pour ne faire correspondre que les guillemets doubles.+
: une ou plusieurs guillemets, caractères, tels que définis par la classe char précédente (facultatif)g
: le drapeau mondial . Cela indique à JS d'appliquer l'expression régulière à la chaîne entière. Si vous omettez cela, vous ne remplacerez qu'un seul caractère.Si vous essayez de supprimer les guillemets autour d'une chaîne donnée (c'est-à-dire par paires), les choses deviennent un peu plus compliquées. Vous devrez utiliser des assertions de contournement:
Regex a expliqué:
"
: littéral, correspond à n'importe quel littéral"
(
: commencez à capturer le groupe. Tout ce qui est entre les parenthèses (()
) sera capturé et pourra être utilisé dans la valeur de remplacement.[^"]+
: Classe de personnage, correspond à tous les caractères, sauf"
1 ou plusieurs fois(?=")
: assertion d'anticipation positive de largeur nulle (comme dans non capturée). Le match précédent ne sera valide que s'il est suivi d'un"
littéral)
: fin du groupe de capture, nous avons tout capturé entre la fermeture d'ouverture"
"
: un autre littéral, cf élément de liste unLe remplacement est
'$1'
, c'est une référence arrière au premier groupe capturé, étant[^" ]+
, ou tout entre les guillemets doubles. Le modèle correspond à la fois aux guillemets et à ce qui se trouve entre eux, mais le remplace uniquement par ce qui se trouve entre les guillemets, les supprimant ainsi efficacement.Ce qu'il fait est
some "string with" quotes
-> remplace"string with"
par ->string with
. Les citations ont disparu, le travail est fait.Si les guillemets doivent toujours être au début et à la fin de la chaîne, vous pouvez utiliser ceci:
Avec l'entrée
remove "foo" delimiting "
, la sortie restera inchangée, mais changez la chaîne d'entrée en"remove "foo" delimiting quotes"
, et vous vous retrouverez avecremove "foo" delimiting quotes
comme sortie.Explication:
^"
: correspond au début de la chaîne^
et a"
. Si la chaîne ne commence pas par un"
, l'expression échoue déjà ici et rien n'est remplacé.(.+(?="$))
: correspond (et capture) tout, y compris les guillemets doubles une ou plusieurs fois, à condition que l'anticipation positive soit vraie(?="$)
: le lookahead positif est à peu près le même que ci-dessus, seulement il spécifie que le"
doit être la fin de la chaîne ($
=== end)"$
: correspond à cette citation de fin, mais ne la capture pasLe remplacement se fait de la même manière qu'avant: nous remplaçons la correspondance (qui comprend les guillemets d'ouverture et de fermeture), avec tout ce qui était à l'intérieur.
Vous avez peut-être remarqué que j'ai omis l'
g
indicateur (pour le BTW global), car puisque nous traitons la chaîne entière, cette expression ne s'applique qu'une seule fois.Une expression rationnelle plus facile qui fait à peu près la même chose (il existe une différence interne de la façon dont la expression rationnelle est compilée / appliquée) serait:
Comme précédemment
^"
et"$
faites correspondre les guillemets de délimitation au début et à la fin d'une chaîne, et le fait(.+)
correspondre tout le reste et le capture. J'ai essayé cette expression régulière, à côté de celle ci-dessus (avec assertion de lookahead) et, certes, à ma surprise, j'ai trouvé que celle-ci était légèrement plus lente. Je suppose que l'assertion de la recherche entraîne l'échec de l'expression précédente dès que le moteur détermine qu'il n'y en a pas"
à la fin de la chaîne. Ah bien, mais si c'est ce que vous voulez / avez besoin, veuillez lire :Cependant, dans ce dernier cas, c'est beaucoup plus sûr, plus rapide, plus facile à entretenir et tout simplement mieux de le faire:
Ici, je vérifie si le premier et le dernier caractère de la chaîne sont des guillemets doubles. S'ils le sont, j'utilise
substr
pour couper ces premier et dernier caractères. Les chaînes sont indexées à zéro, donc le dernier caractère est lecharAt(str.length -1)
.substr
attend 2 arguments, où le premier est le décalage à partir duquel la sous-chaîne démarre, le second est sa longueur. Puisque nous ne voulons pas du dernier caractère, pas plus que nous ne voulons du premier, cette longueur eststr.length - 2
. Facile-peazy.Astuces :
Plus d'informations sur les assertions peuvent être trouvées ici Les
Regex sont très utiles (et amusantes à l'OMI), peuvent être un peu déroutantes au début. Voici quelques détails supplémentaires et des liens vers des ressources sur le sujet.
Si vous n'êtes pas encore très à l'aise avec les expressions régulières, vous voudrez peut-être envisager d'utiliser:
S'il y a beaucoup de guillemets dans la chaîne, cela pourrait même être plus rapide que d'utiliser l'expression régulière
la source
Cette expression régulière supprimera uniquement les guillemets si ce sont les premier et dernier caractères de la chaîne. F.ex:
la source
Si la chaîne est garantie d'avoir une citation (ou tout autre caractère unique) au début et à la fin que vous souhaitez supprimer:
slice
a beaucoup moins de frais généraux qu'une expression régulière.la source
<uri>
et les littéraux comme"literal"
). Voici donc un vote positif. ;)Si vous avez le contrôle sur vos données et que vous savez que vos guillemets doubles entourent la chaîne (donc n'apparaissent pas à l'intérieur de la chaîne) et que la chaîne est un entier ... dites avec:
ou similaire, cela supprime bien les citations environnantes
Pas une réponse universelle, mais astucieuse pour les besoins de niche
la source
JSON.parse("20151212211647278dfvs");
SyntaxError: Unexpected token d in JSON at position 17
Si vous souhaitez uniquement supprimer les guillemets:
Cette approche ne touchera pas la chaîne si elle ne ressemble pas
"text in quotes"
.la source
a.charAt(x)
si vous souhaitez prendre en charge <ECMA5 (f.ex IE7).Si vous souhaitez uniquement supprimer les guillemets du début ou de la fin, utilisez l'expression régulière suivante:
la source
"foo
etfoo"
. On pourrait seulement vouloir en laisser des paires entières.Pour reformuler votre problème d'une manière plus facile à exprimer en tant qu'expression régulière:
Voici l'expression rationnelle qui fait cela:
Décomposer le regexp:
^"?
une correspondance gourmande pour zéro ou un guillemets doubles"?$
une correspondance gourmande pour zéro ou un guillemets doubles finaux(.+?)
, qui contiendra la cible en tant que$1
.Cela reviendra
delimited "string" here
pour:la source
Un paquebot pour les paresseux
la source
/"/g
ne fonctionnera pas pour"My name is \"Jason\""
." - is a quote
chaîne, donc ce n'est pas la même chose qu'autourCela marche...
la source
'foo"
ou simplementfoo"
Cela peut fonctionner pour vous.
la source
Si vous souhaitez supprimer tous les guillemets doubles dans la chaîne, utilisez
Sinon, vous souhaitez supprimer uniquement les guillemets autour de la chaîne, utilisez:
la source
Ce code simple fonctionnera également, pour supprimer par exemple les guillemets doubles d'une chaîne entourée de guillemets doubles:
la source
Si vous essayez de supprimer les guillemets doubles, essayez de suivre
la source
ce code est très meilleur pour afficher le numéro dans la zone de texte
$ (this) = [votre zone de texte]
la source
Veuillez essayer de suivre l'expression régulière pour supprimer les guillemets doubles de la chaîne.
la source