Ich bin so nah dran, aber es ist einfach nicht richtig. Ich möchte nur das Zeichen r
aus einer Zeichenfolge entfernen . Das Problem ist, dass es mehr als eine Instanz von gibtr
die Zeichenfolge . Es ist jedoch immer das Zeichen bei Index 4 (also das 5. Zeichen).
Beispielzeichenfolge: crt/r2002_2
Was ich möchte: crt/2002_2
Diese Ersetzungsfunktion entfernt beide r
mystring.replace(/r/g, '')
Produziert: ct/2002_2
Ich habe diese Funktion ausprobiert:
String.prototype.replaceAt = function (index, char) {
return this.substr(0, index) + char + this.substr(index + char.length);
}
mystring.replaceAt(4, '')
Es funktioniert nur, wenn ich es durch ein anderes Zeichen ersetze. Es wird es nicht einfach entfernen.
Irgendwelche Gedanken?
javascript
string
replace
character
user1293504
quelle
quelle
Antworten:
ersetzen wird
/r
mit/
VerwendungString.prototype.replace
.Alternativ können Sie Regex mit einem globalen Flag verwenden (wie von Erik Reppen & Sagar Gala unten vorgeschlagen), um alle Vorkommen durch zu ersetzen
BEARBEITEN: Da alle hier so viel Spaß haben und user1293504 nicht bald zurück zu kommen scheint, um klärende Fragen zu beantworten, ist hier eine Methode, um das N-te Zeichen aus einer Zeichenfolge zu entfernen:
Da user1293504 die normale Anzahl anstelle einer nullindizierten Anzahl verwendet hat, müssen wir 1 aus dem Index entfernen. Wenn Sie dies verwenden möchten, um zu replizieren, wie
charAt
funktioniert, subtrahieren Sie nicht 1 vom Index in der 3. Zeile und verwenden Sietmp.splice(i, 1)
stattdessen.quelle
"/"
Ein einfacher funktionaler Javascript-Weg wäre
mystring = mystring.split('/r').join('/')
Einfach, schnell, global zu ersetzen und ohne Funktionen oder Prototypen
quelle
'/'
Es gibt immer die Zeichenfolgenfunktionen, wenn Sie wissen, dass Sie immer das vierte Zeichen entfernen werden:
quelle
str.slice(0, 0) + str.slice(1, str.length)
Entfernt den ersten undstr.slice(0, str.length-1) + str.slice(str.length, str.length)
den letzten. (Natürlich würden Sie die redundanten Teile entfernen, wenn Sie wissen, dass Sie immer die ersten oder letzten entfernen, aber wenn es sich um Variablen handelt, funktionieren sie genauso gut wie jeder andere Index.)Deine erste Funk ist fast richtig. Entfernen Sie einfach das 'g'-Flag, das für' global 'steht (bearbeiten), und geben Sie ihm einen Kontext, um das zweite' r 'zu erkennen.
Bearbeiten: Ich habe nicht gesehen, dass es das zweite 'r' war, also habe ich das '/' hinzugefügt. Benötigt \ /, um das '/' zu umgehen, wenn ein regEx-Argument verwendet wird. Vielen Dank für die Upvotes, aber ich habe mich geirrt, also werde ich mehr Details für Leute korrigieren und hinzufügen, die daran interessiert sind, die Grundlagen von regEx besser zu verstehen, aber das würde funktionieren:
Nun zur übermäßigen Erklärung:
Denken Sie beim Lesen / Schreiben eines regEx-Musters an: <a Zeichen oder Zeichensatz> gefolgt von <a Zeichen oder Zeichensatz> gefolgt von <...
In regEx kann <a Zeichen oder Zeichensatz> einzeln sein:
Lesen Sie also als e, gefolgt von a, gefolgt von c usw.
Oder ein einzelnes <a Zeichen oder ein Satz von Zeichen> können Zeichen sein, die von einer Zeichenklasse beschrieben werden:
Oder erweitert, um einer Anzahl von Zeichen zu entsprechen (aber am besten als ein einzelnes Element in Bezug auf das sequentielle Muster zu betrachten):
Also mach ein paar zusammen:
Und natürlich habe ich zu viel ausgearbeitet, aber mein Punkt war einfach, dass dies:
ist eine Reihe von 3 Musterelementen (eine Sache, gefolgt von einer Sache, gefolgt von einer Sache).
Und so ist das:
So verrückt regEx auch aussieht, es zerfällt alles in eine Reihe von Dingen (möglicherweise Dinge mit mehreren Zeichen), die nacheinander aufeinander folgen. Ein grundlegender Punkt, aber einer, für den ich eine Weile gebraucht habe, um vorbei zu kommen. Ich bin über Bord gegangen und habe ihn hier erklärt, da ich denke, dass er dem OP und anderen RegEx-Neulingen helfen würde, zu verstehen, was los ist. Der Schlüssel zum Lesen / Schreiben von regEx besteht darin, es in diese Teile zu zerlegen.
quelle
Für den globalen Ersatz von '/ r' hat dieser Code für mich funktioniert.
quelle
Repariere einfach deine
replaceAt
:Ich würde es
removeAt
stattdessen nennen. :) :)quelle
char.length
ist Null. Sie müssen1
in diesem Fall hinzufügen , um Zeichen zu überspringen.quelle
replaceAt
es nicht funktioniert. Es sollte ein Kommentar zur ursprünglichen Frage anstelle einer Antwort sein. :)Any thoughts?
.Wenn es immer das 4. Zeichen in Ihrem String ist, können Sie versuchen:
quelle
Dies liegt daran , wenn
char
gleich""
,char.length
0, so dass Ihr Teil kombinieren , um die ursprüngliche Zeichenfolge zu bilden. Bei Ihrem Codeversuch funktioniert Folgendes:quelle
Erstellen Sie eine Funktion wie unten
Zum Ersetzen geben Sie Zeichen wie unten
Um das Zeichen am bestimmten Index zu entfernen, geben Sie den zweiten Parameter als leere Zeichenfolge an
quelle
Wenn Sie nur ein einzelnes Zeichen entfernen möchten und den Index eines Zeichens kennen, das Sie entfernen möchten, können Sie die folgende Funktion verwenden:
quelle
Ich mag es nicht, die Ersetzungsfunktion zu verwenden, um Zeichen aus der Zeichenfolge zu entfernen. Das ist nicht logisch , um es so zu machen. Normalerweise programmiere ich in C # (scharf), und wann immer ich Zeichen aus der Zeichenfolge entfernen möchte, verwende ich die Remove-Methode der String-Klasse, aber keine Replace-Methode, obwohl sie vorhanden ist, denn wenn ich sie entfernen möchte, entferne ich kein ersetzen. Das ist logisch!
In Javascript gibt es keine Entfernungsfunktion für Zeichenfolgen, aber eine Substr-Funktion. Sie können die substr-Funktion ein- oder zweimal verwenden, um Zeichen aus der Zeichenfolge zu entfernen. Sie können die folgende Funktion ausführen, um Zeichen am Startindex bis zum Ende der Zeichenfolge zu entfernen, genau wie die c # -Methode zuerst String.Remove (int startIndex) überlädt:
und / oder Sie können auch die folgende Funktion ausführen, um Zeichen beim Startindex zu entfernen und zu zählen, genau wie bei der zweiten Überladung der c # -Methode String.Remove (int startIndex, int count):
und dann können Sie diese beiden Funktionen oder eine davon für Ihre Bedürfnisse verwenden!
Beispiel:
Ausgabe: crt / 2002_2
Das Erreichen von Zielen durch Techniken ohne Logik kann zu Verwirrung beim Verständnis des Codes und zu zukünftigen Fehlern führen, wenn Sie dies in einem großen Projekt häufig tun!
quelle
String.prototype.replace
, die Teil der Basis-API ist. Darüber hinaus ist es in Bezug auf die Programmierung ziemlich logisch, das Entfernen als Sonderfall des Ersetzens zu verstehen. Sie sollten nicht versuchen, Ihre API so zu gestalten, dass sie alle Wörter im englischen Wörterbuch enthält. Sie sollten versuchen, Ihre API auf die minimale orthogonale Basis zu reduzieren.Die folgende Funktion hat in meinem Fall am besten funktioniert:
quelle
Der kürzeste Weg wäre die Verwendung von Spleiß
quelle
c
und dem ist"
)Sie können dies verwenden:
if ( str[4] === 'r' ) str = str.slice(0, 4) + str.slice(5)
Erläuterung:
if ( str[4] === 'r' )
Überprüfen Sie, ob das 5. Zeichen a ist
'r'
str.slice(0, 4)
Schneiden Sie die Schnur, um alles vor dem zu bekommen
'r'
+ str.slice(5)
Fügen Sie den Rest der Zeichenfolge hinzu.
Minimiert:
s=s[4]=='r'?s.slice(0,4)+s.slice(5):s
[37 Bytes!]DEMO:
quelle
quelle
Dies ist eine Verbesserung der einfachen Antwort (Länge weglassen)
Code-Snippet anzeigen
quelle
In C # (scharf) können Sie ein leeres Zeichen als '\ 0' erstellen. Vielleicht kannst du das machen:
Suchen Sie auf Google oder surfen Sie im Interent und prüfen Sie, ob Sie mit Javascript leere Zeichen erstellen können, wie dies bei C # der Fall ist. Wenn ja, dann lernen Sie, wie es geht, und vielleicht funktioniert die Funktion replaceAt endlich, und Sie werden erreichen, was Sie wollen!
Schließlich wird dieses 'r'-Zeichen entfernt!
quelle