2016-07-09 1 views
0

I haben die folgende EingabeWas wird der effiziente Weg sein, Charaktere aus geschweiften Klammern zu ersetzen?

var input = (a-d){12-16},(M-Z){5-8},[@$%!^,12+-,23^!] 

Ich brauche das Komma in den eckigen Klammern zu entfernen, so dass die endgültige Ausgabe

var output = (a-d){12-16},(M-Z){5-8},[@$%!^12+-23^!] 

durch Lösungspolymerisation

function test() 
{ 
    var input = '(a-d){12-16},(M-Z){5-8},[@$%!^,12+-,23^!]'; //input string 
    var splitByFirstBracket = input.split("["); //split the input by [ character  

    //merge the arrays where the second array is replaced by '' for ',' 
    var output = splitByFirstBracket[0] + '[' + splitByFirstBracket[1].replace(/,/g,'');  
    alert(output); 
} 

Es stellt sein wird die Ausgabe korrekt. Gibt es einen besseren Weg - ich bin sowohl für JavaScript und JQuery offen.

Vielen Dank im Voraus

+0

dies geschrieben werden sollte [Codereview] (http://codereview.stackexchange.com) – guradio

Antwort

2

können Sie einen regulären Ausdruck Ersatz verwenden. Die Ersetzung kann eine Funktion sein, die den Teil der Eingabe empfängt, der von der Regexp abgeglichen wurde, und dann die Ersetzung berechnen kann. In diesem Fall würde es einen anderen Replace-Aufruf verwenden, um die Kommas zu entfernen.

var input = '(a-d){12-16},(M-Z){5-8},[@$%!^,12+-,23^!]'; //input string 
 
var output = input.replace(/\[.*?\]/g, function(match) { 
 
    return match.replace(/,/g, ''); 
 
}); 
 
console.log(output);

+0

barmar kann ich etwas fragen 'input.replace (/ \ [. *? \]/g, function (match) {'das wird' [@ $%! ^, 12 + -, 23 ^!] 'was ist gleich' match'? dann 'match.replace (/,/g, ''); 'wird entfernen', 'bitte korrigieren, wenn ich falsch liege Ich möchte verstehen, wie es passiert ist .. danke – guradio

+1

Ja, so funktioniert es.Die Funktion empfängt den Teil der Zeichenkette, die der regexp als Argument entspricht Was immer es zurückgibt, ersetzt dieses Spiel. – Barmar

Verwandte Themen