wake-up-neo.com

Wie kann ich mit Javascript ein Zeichen aus einer Zeichenfolge entfernen?

Ich bin so nah dran, das zu bekommen, aber es stimmt einfach nicht. Alles, was ich möchte, ist das Zeichen "r" aus einer Zeichenfolge zu entfernen. Das Problem ist, dass es mehr als eine Instanz von "r" in der Zeichenfolge gibt. Es ist jedoch immer das Zeichen an Index 4 (also das 5. Zeichen).

beispielstring: "crt/r2002_2" Was ich will: "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?

260
user1293504
var mystring = "crt/r2002_2";
mystring = mystring.replace('/r','/');

ersetzt /r durch / mit String.prototype.replace .

Alternativ können Sie Regex mit einem globalen Flag (wie von Erik Reppen & Sagar Gala , unten vorgeschlagen) verwenden, um alle Vorkommen mit zu ersetzen

mystring = mystring.replace(/\/r/g, '/');
364
JKirchartz

Ein einfacher funktionaler Javascript Weg wäre

mystring = mystring.split('/r').join('/')

einfach, schnell, wird global ersetzt und es werden keine Funktionen oder Prototypen benötigt

57
Strife86

Es gibt immer die String-Funktionen, wenn Sie wissen, dass Sie immer das vierte Zeichen entfernen werden:

str.slice(0, 4) + str.slice(5, str.length))
46
simpleigh

Ihre erste Funktion ist fast richtig. Entfernen Sie einfach das Flag 'g', das für 'global' (edit) steht, und geben Sie ihm einen Kontext, um das zweite 'r' zu erkennen.

Edit: Ich habe nicht gesehen, dass es das zweite 'r' war, also fügte '/' hinzu. Benötigt\/, um das '/' zu entfernen, wenn ein RegEx-Argument verwendet wird. Vielen Dank für die Upvotes, aber ich habe mich geirrt, also werde ich die Informationen verbessern und hinzufügen, damit die Leute die Grundlagen von regEx besser verstehen können, aber das würde funktionieren:

mystring.replace(/\/r/, '/')

Nun zu den exzessiven Erklärungen:

Wenn Sie ein RegEx-Muster lesen/schreiben, denken Sie an Folgendes: <ein Zeichen oder eine Menge Zeichen, gefolgt von <ein Zeichen oder eine Menge Zeichen, gefolgt von <...

In regEx <ein Zeichen oder ein Satz von Zeichen> kann jeweils einer sein:

/each char in this pattern/

Lesen Sie also als e, gefolgt von a, gefolgt von c usw.

Oder ein einzelnes <ein Zeichen oder eine Gruppe von Zeichen> könnte Zeichen sein, die von einer Zeichenklasse beschrieben werden:

/[123!y]/
//any one of these
/[^123!y]/
//anything but one of the chars following '^' (very useful/performance enhancing btw)

Oder erweitert um eine Anzahl von Zeichen (aber am besten als einzelnes Element in Bezug auf das sequentielle Muster):

/a{2}/
//precisely two 'a' chars - matches identically as /aa/ would

/[aA]{1,3}/
//1-3 matches of 'a' or 'A'

/[a-zA-Z]+/
//one or more matches of any letter in the alphabet upper and lower
//'-' denotes a sequence in a character class

/[0-9]*/
//0 to any number of matches of any decimal character (/\d*/ would also work)

So smoosh ein Bündel zusammen:

   var rePattern = /[aA]{4,8}(Eat at Joes|Joes all you can eat)[0-5]+/g
   var joesStr = 'aaaAAAaaEat at Joes123454321 or maybe aAaAJoes all you can   eat098765';

   joesStr.match(rePattern);

   //returns ["aaaAAAaaEat at Joes123454321", "aAaAJoes all you can eat0"]
   //without the 'g' after the closing '/' it would just stop at the first   match and return:
   //["aaaAAAaaEat at Joes123454321"]

Und natürlich habe ich überarbeitet, aber mein Punkt war einfach:

/cat/

ist eine Reihe von 3 Musterelementen (etwas gefolgt von etwas gefolgt von etwas).

Und so ist das auch:

/[aA]{4,8}(Eat at Joes|Joes all you can eat)[0-5]+/

So verrückt wie RegEx aussieht, zerfällt alles nach einer Reihe von Dingen (möglicherweise aus mehreren Zeichen bestehenden), die aufeinander folgen. Irgendwie ein grundlegender Punkt, aber ich brauchte eine Weile, um vorbeizukommen, also bin ich über Bord gegangen und habe es hier erklärt, weil ich denke, es ist einer, der dem OP und anderen helfen wird, zu verstehen, was los ist. Der Schlüssel zum Lesen/Schreiben von RegEx besteht darin, es in diese Teile zu zerlegen.

24
Erik Reppen

Bei der globalen Ersetzung von '/ r' hat dieser Code für mich funktioniert.

mystring = mystring.replace(/\/r/g,'');
10
Sagar Gala

Reparieren Sie einfach Ihre replaceAt:

String.prototype.replaceAt = function(index, charcount) {
  return this.substr(0, index) + this.substr(index + charcount);
}

mystring.replaceAt(4, 1);

Ich würde es stattdessen removeAt nennen. :)

4
Ken White
return this.substr(0, index) + char + this.substr(index + char.length);

char.length ist null. Sie müssen in diesem Fall 1 hinzufügen, um Zeichen zu überspringen.

4
Eugene Retunsky

Wenn es immer das vierte Zeichen in Ihrem String ist, können Sie Folgendes versuchen 

yourString.replace(/^(.{4})(r)/, function($1, $2) { return $2; });
2
Just_Mad

Es funktioniert nur, wenn ich es durch ein anderes Zeichen ersetze. Es wird es nicht einfach entfernen.

Wenn char gleich "" ist, ist char.length gleich 0, so dass sich Ihre Teilzeichenfolgen zu der ursprünglichen Zeichenfolge kombinieren. Beim Code-Versuch wird Folgendes funktionieren:

String.prototype.replaceAt = function (index, char) {
    return this.substr(0, index) + char + this.substr(index + 1);
    //   this will 'replace' the character at index with char ^
}
2
paislee

Der kürzeste Weg wäre die Verwendung von Spleißen

var inputString = "abc";
// convert to array and remove 1 element at position 4 and save directly to the array itself
let result = inputString.split("").splice(3, 1).join();
console.log(result);
1
Gabrielus

Funktion erstellen wie unten 

  String.prototype.replaceAt = function (index, char) {
    if(char=='')
    {
    return this.slice(0,index)+this.substr(index+1 + char.length);
    }
    else
    {

    return this.substr(0, index) + char + this.substr(index + char.length);
    }
    }

Um ein Zeichen wie folgt zu ersetzen

  var a="12346";
    a.replaceAt(4,'5');

 enter image description here

und zum Entfernen des Zeichens am Index geben Sie den zweiten Parameter als leere Zeichenfolge ein.

a.replaceAt (4, '');

 enter image description here

1
Rajiv

Sie können dies verwenden: if ( str[4] === 'r' ) str = str.slice(0, 4) + str.slice(5)

Erklärung:

  1. if ( str[4] === 'r' )
    Überprüfen Sie, ob das 5. Zeichen ein 'r' Ist.

  2. str.slice(0, 4)
    Zerschneide den String, um alles vor dem 'r' Zu erhalten.

  3. + str.slice(5)
    Fügen Sie den Rest der Zeichenfolge hinzu.

Minified:s=s[4]=='r'?s.slice(0,4)+s.slice(5):s [37 Bytes!]

DEMO:

function remove5thR (s) {
  s=s[4]=='r'?s.slice(0,4)+s.slice(5):s;
  console.log(s); // log output
}

remove5thR('crt/r2002_2')  // > 'crt/2002_2'
remove5thR('crt|r2002_2')  // > 'crt|2002_2'
remove5thR('rrrrr')        // > 'rrrr'
remove5thR('RRRRR')        // > 'RRRRR' (no change)
1
jak.b

Wenn Sie nur ein einzelnes Zeichen entfernen möchten und den Index eines zu entfernenden Zeichens kennen, können Sie die folgende Funktion verwenden:

/**
 * Remove single character at particular index from string
 * @param {*} index index of character you want to remove
 * @param {*} str string from which character should be removed
 */
function removeCharAtIndex(index, str) {
    return str.substring(0, index - 1) + str.substring(index, str.length)
}
0
dd619

Die folgende Funktion hat für meinen Fall am besten funktioniert:

public static cut(value: string, cutStart: number, cutEnd: number): string {
    return value.substring(0, cutStart) + value.substring(cutEnd + 1, value.length);
}
0
TekTimmy

Ich kann die replace-Funktion nicht verwenden, um Zeichen aus der Zeichenfolge zu entfernen. Das ist nicht logisch so es zu tun. Normalerweise programmiere ich in C # (Sharp), und wann immer ich Zeichen aus String entfernen möchte, verwende ich die Remove-Methode der String-Klasse, aber keine Replace-Methode, obwohl sie existiert, denn wenn ich sie gerade entferne, entferne ich kein ersetzen Das ist logisch!

In Javascript gibt es keine Funktion zum Entfernen von Zeichenketten, aber es gibt die Funktion substr. Sie können die substr-Funktion ein- oder zweimal verwenden, um Zeichen aus Zeichenfolgen zu entfernen. Sie können die folgende Funktion erstellen, um Zeichen am Startindex bis zum Ende der Zeichenfolge zu entfernen, genau wie bei der Methode c #, die zuerst String.Remove (int startIndex) überladen:

function Remove(str, startIndex) {
    return str.substr(0, startIndex);
}

und/oder Sie können auch die folgende Funktion zum Entfernen von Zeichen beim Startindex und zur Zählung verwenden, genau wie bei der zweiten Überladung der C # -Methode String.Remove (int startIndex, int count):

function Remove(str, startIndex, count) {
    return str.substr(0, startIndex) + str.substr(startIndex + count);
}

und dann können Sie diese beiden Funktionen oder eine davon für Ihre Bedürfnisse verwenden!

Beispiel:

alert(Remove("crt/r2002_2", 4, 1));

Ausgabe: CRT/2002_2

Das Erreichen von Zielen durch Verwenden von Techniken mit ohne Logik kann zu Verwirrungen beim Verständnis des Codes und zukünftigen Fehlern führen, wenn Sie dies in einem großen Projekt häufig tun!

Dies ist eine Verbesserung von einfache Antwort (Länge weglassen)

s.slice(0,4)+s.slice(5)

let s="crt/r2002_2";

let o= s.slice(0,4)+s.slice(5);

let delAtIdx= (s,i) => s.slice(0,i)+s.slice(i+1); // this function remove letter at index i

console.log(o);
console.log(delAtIdx(s,4));

0

In C # (Sharp) können Sie ein leeres Zeichen als '\ 0' ..__ machen. Vielleicht können Sie Folgendes tun:

String.prototype.replaceAt = function (index, char) {
return this.substr(0, index) + char + this.substr(index + char.length);
}
mystring.replaceAt(4, '\0')

Suchen Sie bei 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 replaceAt-Funktion endlich und Sie werden das erreichen, was Sie wollen!

Schließlich wird das 'r' Zeichen entfernt!