Ich habe ein paar Beschriftungen für Eingabefelder:

let labels =  [
    "Foo Bar",
    "Baz (spam & eggs)",
    "More (junk here)"
];

Mein gewünschtes Ergebnis ist:

inputNames = [
    "FooBar",
    "Baz",
    "More"
]

In Python kann ich re.sub() verwenden, um basierend auf Regex zu ersetzen, aber kann die String.replace() -Methode in JS dies tun? Wie würdest du es machen?

0
JacobIRR 17 Apr. 2018 im 21:16

4 Antworten

Beste Antwort

Ich denke so etwas ist am besten lesbar:

let labels =  [
    "Foo Bar",
    "Baz (spam & eggs)",
    "More (junk here)",
    "(corner case)Foo(corner case) Jay"
];

for (i=0; i<labels.length; i++) {
  labels[i] = labels[i].replace(/ /g, "").replace(/\(.*?\)/g, "");
}

console.log(labels);
1
Gillespie 17 Apr. 2018 im 18:28

Verwenden Sie .indexOf ('('), um herauszufinden, ob ' (' vorhanden ist Wenn ja, entfernen Sie in der Zeichenfolge alles, was danach enthalten ist (enthalten), mit substr ()

let labels =  [
     "Foo Bar",
    "Baz (spam & eggs)",
    "More (junk here)"
];

labels.forEach(function(e,i){
var until = e.indexOf(' (');
  if(until !== -1)
    labels[i] = e.substr(0, until);
});

console.log(labels)
1
Scaramouche 17 Apr. 2018 im 18:23

Sie können diesen regulären Ausdruck in JS verwenden:

let labels =  [
    "Foo Bar",
    "Baz (spam & eggs)",
    "More (junk here)"
];

for (i=0; i<labels.length; i++) {
  labels[i] = labels[i].replace(/\s*(?:\([^)]*\))?/g, '');
}

console.log(labels);

Regex /\s*(?:\([^)]*\))?/ entspricht 1+ Leerzeichen, gefolgt von einer optionalen Übereinstimmung in eckigen Klammern.

2
anubhava 17 Apr. 2018 im 18:32

Entfernen Sie zuerst alle Leerzeichen und dann Klammern

inputNames = labels.map(e => e.replace(/ /g, '')).map(e => e.replace(/\(.*\)/g, ''));
1
andi 17 Apr. 2018 im 18:30