108 Stimmen

Ersetzen Sie eine Regex-Capture-Gruppe durch Großbuchstaben in JavaScript

Ich möchte wissen, wie ich in JavaScript eine Erfassungsgruppe durch ihre Großbuchstaben ersetzen kann. Hier ist eine vereinfachte Version dessen, was ich bisher versucht habe und was nicht funktioniert:

> a="foobar"
'foobar'
> a.replace( /(f)/, "$1".toUpperCase() )
'foobar'
> a.replace( /(f)/, String.prototype.toUpperCase.apply("$1") )
'foobar'

Könnten Sie mir bitte erklären, was an diesem Code falsch ist?

1 Stimmen

@Erik entferne keine Komponente einer Frage. Ich möchte auch wissen, warum mein Code nicht funktioniert.

2 Stimmen

Evan, ich dachte, ich wäre respektvoll gegenüber deiner Frage. Ich habe nur Dinge entfernt, die unnötig schienen. Da du den Code angegeben hast, den du ausprobiert hast, und es offensichtlich nicht funktioniert hat, wussten die Leute implizit, dass du eine Erklärung brauchst, warum, ohne dass du es sagen musstest (und ungeschickt). Ich versuche nur zu helfen! :)

1 Stimmen

Evan, ist das besser? Ich will nicht nerven. Wenn du erneut zurückrollst, werde ich nicht nochmal bearbeiten, aber könntest du zumindest die Titel- und Tag-Änderungen beibehalten?

0voto

guest271314 Punkte 1

Gegeben ein Wörterbuch (Objekt, in diesem Fall eine Map) von Eigenschaften, Werten und Verwendung von .bind() wie in den Antworten beschrieben

const regex = /([A-z0-9]+)/;
const dictionary = new Map([["hello", 123]]); 
let str = "hello";
str = str.replace(regex, dictionary.get.bind(dictionary));

console.log(str);

Verwendung eines JavaScript-Plain-Objekts und einer definierten Funktion, um den übereinstimmenden Eigenschaftswert des Objekts zurückzugeben oder den Original-String, falls keine Übereinstimmung gefunden wird

const regex = /([A-z0-9]+)/;
const dictionary = {
  "hello": 123,
  [Symbol("dictionary")](prop) {
    return this[prop] || prop
  }
};
let str = "hello";
str = str.replace(regex, dictionary[Object.getOwnPropertySymbols(dictionary)[0]].bind(dictionary));

console.log(str);

0voto

Peanuts-83 Punkte 3

Im Falle der Umwandlung von Zeichenfolgen von CamelCase zu Bash_case (dh für Dateinamen) verwenden Sie einen Rückruf mit ternärem Operator.

Die erfasste Gruppe, die mit einem Regulären Ausdruck () im ersten (linken) Ersetzungsargument ausgewählt wurde, wird an das zweite (rechte) Argument gesendet, das eine Rückruffunktion ist. x und y geben die erfasste Zeichenfolge (weiß nicht warum 2 mal!) und der Index (der dritte) gibt den Index des Beginns der erfassten Gruppe in der Referenzzeichenfolge an. Daher kann ein ternärer Operator verwendet werden, um kein _ beim ersten Auftreten zu platzieren.

let str = 'MyStringName';
str = str.replace(/([^a-z0-9])/g, (x,y,index) => {
      return index != 0 ? '_' + x.toLowerCase() : x.toLowerCase();
});
console.log(str);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X