2017-03-10 1 views
0

Ich bin mir nicht sicher über die Terminologie, aber lassen Sie mich versuchen zu erklären, was ich erreichen möchte. Ich habe viel HTML-Code, wobei ich Teile von name- und id-attributen (ua) ersetzen muss.Kombinieren Sie reguläre Ausdrücke ohne Auffüllen der Ergebnisse in Javascript

Diese Attribute können Zeichenfolgen wie VALUE[1][0][question][0], VALUE[1][0][answer][0], aber auch MEDIA_1 und openMedia(1, '', 'title') enthalten.

In den Saiten, die wir manchmal brauchen die zweiten und letzten [0] mit [1] oder MEDIA_1 mit MEDIA_2 oder openMedia(1, '', 'title') mit openMedia(2, '', 'title') und so weiter zu ersetzen.

Um die Dinge einfach (oder nicht) zu halten, habe ich mit dem folgenden regulären Ausdruck kommen:

/(VALUE)\[(\d+)\]\[(\d+)\]\[(.*?)\]\[(\d+)\]|(MEDIA)_(\d+)|(openMedia)\((\d+),/gm 

ich einzelne Präfixe zu erfassen ich versucht, wie openMedia durch die Ergebnisse zu Schleife in der Lage sein, und Tue die Ersetzungen nach dem Präfix. Ich hoffe, ich bin klar genug. Ich verwende den folgenden Code durch die Ergebnisse in einer Schleife:

while ((m = regex.exec(html)) !== null) { 
    if (m.index === regex.lastIndex) { 
    regex.lastIndex++; 
    } 
    console.log(m); 
} 

Mein Problem ist, dass m manchmal so aussieht:

Array [ "VALUE[1][0][question][0]", "VALUE", "1", "0", "question", "0", undefined, undefined, undefined, undefined, undefined, undefined ] 
Array [ "openMedia(1,", undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, "openMedia", "1" ] 

Wie kann ich ein „unpadded“ Ergebnis zu erhalten? Ich erwarte, dass das Array einfach

zum Beispiel ist.

+1

Ihre Frage scheint zu sein, dass Sie 'undefined' Werte von einem entfernt array: 'arr.filter (x => x! == undefiniert)' – trincot

+0

Optionale geben unbestimmt zurück, wenn sie nicht übereinstimmen. Sie können nur die undefinierten Ergebnisse ausfiltern. Str.match (re) .filter (x => x) ' – epascarello

+0

@trincot hat mich um 30 Sekunden geschlagen ... lachend, dass wir beide x benutzt haben. :) – epascarello

Antwort

1

Ihre Frage scheint mehr zu sein, als Sie wollen undefined Werte aus einem Array entfernt werden. Dies können Sie mit filter tun:

m = m.filter(x => x !== undefined) 

Dies reduziert dies:

[ "openMedia(1,", undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, "openMedia", "1" ] 

An:

[ "openMedia(1,", "openMedia", "1" ] 
+0

Weiß auch nicht über die Filterfunktion, danke nochmal, tolle Antwort auf eine Unterfrage;) – ynamite