Ich möchte das ""
um einen String entfernen .
zB wenn der String ist: "I am here"
dann möchte ich nur ausgeben I am here
.
javascript
regex
ankur
quelle
quelle
str = str.replace(/"/g,"");
str = str.replace(/^"|"$/g, '');
ersetzt Grenzzitate. Mr_Greens Antwort wird global ALLE ersetzen,"
was nicht gut istAntworten:
Angenommen:
Das sollte den Trick machen ... (wenn Ihr Ziel darin besteht, alle doppelten Anführungszeichen zu ersetzen ).
So funktioniert das:
['"]
ist eine Zeichenklasse, die sowohl einfache als auch doppelte Anführungszeichen enthält. Sie können dies durch ersetzen,"
um nur doppelte Anführungszeichen zu erhalten.+
: ein oder mehrere Anführungszeichen, Zeichen, wie in der vorhergehenden Zeichenklasse definiert (optional)g
: die globale Flagge. Dies weist JS an, den regulären Ausdruck auf die gesamte Zeichenfolge anzuwenden. Wenn Sie dies weglassen, ersetzen Sie nur ein einzelnes Zeichen.Wenn Sie versuchen, die Anführungszeichen um eine bestimmte Zeichenfolge (dh paarweise) zu entfernen, wird es etwas schwieriger. Sie müssen Lookaround-Assertions verwenden:
Regex erklärte:
"
: Literal, passt zu jedem Literal"
(
: Beginnen Sie mit der Erfassung der Gruppe. Was auch immer zwischen den Klammern (()
) steht, wird erfasst und kann im Ersatzwert verwendet werden.[^"]+
: Zeichenklasse, entspricht allen Zeichen, außer"
1 oder mehr Mal(?=")
: Positive Lookahead-Behauptung mit einer Breite von Null (wie in nicht erfasst). Die vorherige Übereinstimmung ist nur gültig, wenn ein"
Literal folgt)
: Ende der Erfassungsgruppe, wir haben alles zwischen dem Eröffnungsschluss erfasst"
"
: ein anderes Literal, siehe Listenpunkt einsDie Ersetzung ist
'$1'
, dass dies ein Rückverweis auf die erste erfasste Gruppe ist[^" ]+
, die zwischen den doppelten Anführungszeichen steht oder steht. Das Muster stimmt sowohl mit den Anführungszeichen als auch mit den dazwischen liegenden Anführungszeichen überein, ersetzt es jedoch nur durch die Anführungszeichen zwischen den Anführungszeichen, wodurch sie effektiv entfernt werden.Was es tut, ist
some "string with" quotes
-> ersetzt"string with"
durch ->string with
. Zitate weg, Arbeit erledigt.Wenn sich die Anführungszeichen immer am Anfang und am Ende der Zeichenfolge befinden, können Sie Folgendes verwenden:
Bei der Eingabe
remove "foo" delimiting "
bleibt die Ausgabe unverändert, aber ändern Sie die Eingabezeichenfolge in"remove "foo" delimiting quotes"
, und Sie erhalten dieremove "foo" delimiting quotes
Ausgabe.Erläuterung:
^"
: Entspricht dem Anfang der Zeichenfolge^
und a"
. Wenn die Zeichenfolge nicht mit a beginnt"
, schlägt der Ausdruck hier bereits fehl und nichts wird ersetzt.(.+(?="$))
: Stimmt alles überein (und erfasst) alles, einschließlich doppelter Anführungszeichen ein- oder mehrmals, vorausgesetzt, der positive Lookahead ist wahr(?="$)
: Der positive Vorgriff - wesentlich die gleiche wie oben ist, nur gibt es , dass die"
muß das Ende der Zeichenfolge sein ($
=== end)"$
: Entspricht diesem Endzitat, erfasst es jedoch nichtDas Ersetzen erfolgt auf die gleiche Weise wie zuvor: Wir ersetzen das Match (einschließlich der Eröffnungs- und Schlusszitate) durch alles, was sich in ihnen befand.
Möglicherweise haben Sie bemerkt, dass ich das
g
Flag weggelassen habe (für globales BTW), da dieser Ausdruck nur einmal gilt, da wir die gesamte Zeichenfolge verarbeiten.Ein einfacher Regex, der so ziemlich dasselbe tut (es gibt interne Unterschiede bei der Kompilierung / Anwendung des Regex), wäre:
Wie zuvor
^"
und"$
stimmen Sie mit den abgrenzenden Anführungszeichen am Anfang und Ende eines Strings(.+)
überein , und das stimmt mit allem dazwischen überein und erfasst es. Ich habe diesen regulären Ausdruck neben dem obigen ausprobiert (mit Lookahead-Behauptung) und zu meiner Überraschung zugegebenermaßen festgestellt, dass dieser etwas langsamer ist. Meine Vermutung wäre, dass die Lookaround-Zusicherung dazu führt, dass der vorherige Ausdruck fehlschlägt, sobald die Engine feststellt, dass"
am Ende der Zeichenfolge keine steht. Na ja , aber wenn Sie dies wollen / brauchen, lesen Sie bitte weiter :In diesem letzten Fall ist es jedoch weitaus sicherer, schneller, wartbarer und einfach besser, dies zu tun:
Hier überprüfe ich, ob das erste und das letzte Zeichen in der Zeichenfolge doppelte Anführungszeichen sind. Wenn ja
substr
, schneide ich die ersten und letzten Zeichen ab. Strings sind nullindiziert, daher ist das letzte Zeichen dascharAt(str.length -1)
.substr
erwartet 2 Argumente, wobei das erste der Versatz ist, von dem aus die Teilzeichenfolge beginnt, das zweite die Länge. Da wir das letzte Zeichen nicht mehr wollen als das erste, ist diese Längestr.length - 2
. Einfach peazy.Tipps :
Weitere Informationen zu Lookaround-Behauptungen finden Sie hier.
Regex's sind sehr nützlich (und machen IMO-Spaß) und können zunächst etwas verwirrend sein. Hier finden Sie weitere Details und Links zu Ressourcen zu diesem Thema.
Wenn Sie mit Regex noch nicht sehr vertraut sind, sollten Sie Folgendes in Betracht ziehen:
Wenn die Zeichenfolge viele Anführungszeichen enthält, ist dies möglicherweise sogar schneller als die Verwendung von Regex
quelle
Dieser reguläre Ausdruck entfernt die Anführungszeichen nur, wenn es sich um das erste und das letzte Zeichen der Zeichenfolge handelt. F.ex.:
quelle
Wenn die Zeichenfolge am Anfang und am Ende garantiert ein Anführungszeichen (oder ein anderes einzelnes Zeichen) enthält, das Sie entfernen möchten:
slice
hat viel weniger Overhead als ein regulärer Ausdruck.quelle
<uri>
und Literale als" bezeichnet"literal"
). Also hier ist eine Gegenstimme. ;)Wenn Sie die Kontrolle über Ihre Daten haben und wissen, dass Ihre doppelten Anführungszeichen die Zeichenfolge umgeben (also nicht in der Zeichenfolge erscheinen) und die Zeichenfolge eine Ganzzahl ist ... sagen Sie mit:
oder ähnlich entfernt dies schön die umgebenden Anführungszeichen
Keine universelle Antwort, jedoch für Nischenbedürfnisse geeignet
quelle
JSON.parse("20151212211647278dfvs");
SyntaxError: Unexpected token d in JSON at position 17
Wenn Sie nur die Anführungszeichen entfernen möchten:
Dieser Ansatz berührt die Zeichenfolge nicht, wenn sie nicht so aussieht
"text in quotes"
.quelle
a.charAt(x)
Sie diese Option, wenn Sie <ECMA5-Unterstützung wünschen (z. B. IE7).Wenn Sie nur Anführungszeichen am Anfang oder am Ende entfernen möchten, verwenden Sie den folgenden regulären Ausdruck:
quelle
"foo
und ändern würdefoo"
. Man möchte vielleicht nur ganze Paare davon fallen lassen.So formulieren Sie Ihr Problem auf eine Weise, die sich leichter als regulärer Ausdruck ausdrücken lässt:
Hier ist der reguläre Ausdruck, der das tut:
Den regulären Ausdruck aufschlüsseln:
^"?
eine gierige Übereinstimmung für null oder eine führende doppelte Anführungszeichen"?$
eine gierige Übereinstimmung für null oder eine nachfolgende doppelte Anführungszeichen(.+?)
, die das Ziel als enthalten$1
.Dies wird zurückkehren
delimited "string" here
für:quelle
Ein Einzeiler für die Faulen
quelle
/"/g
wird nicht funktionieren für"My name is \"Jason\""
." - is a quote
Zeichenfolge nicht gut ist , also ist es nicht dasselbe wie umDas funktioniert...
quelle
'foo"
oder einfachfoo"
Dies kann für Sie funktionieren.
quelle
Wenn Sie alle doppelten Anführungszeichen in Zeichenfolgen entfernen möchten, verwenden Sie
Andernfalls möchten Sie nur Anführungszeichen um die Zeichenfolge entfernen. Verwenden Sie:
quelle
Dieser einfache Code funktioniert auch, um beispielsweise doppelte Anführungszeichen aus einer Zeichenfolge zu entfernen, die von doppelten Anführungszeichen umgeben ist:
quelle
Wenn Sie versuchen, die doppelten Anführungszeichen zu entfernen, versuchen Sie Folgendes
quelle
Dieser Code ist sehr gut für die Show-Nummer im Textfeld
$ (this) = [dein Textfeld]
quelle
Bitte versuchen Sie, dem regulären Ausdruck zu folgen, um doppelte Anführungszeichen aus der Zeichenfolge zu entfernen.
quelle