2016-09-05 5 views
0

Ich möchte nur einen Bereich des Match-Teils erfassen. Ich habe folgenden String: " type1-class1 type1-class2 type2-class4 type2-type1-class3 " und ich möchte folgendes Ergebnis ["class1", "class2"]. Ich suche die Klasse von type. Ich habe versucht, folgende:Regex - Javascript Capture-Bereich

console.log(" type1-class1 type1-class2 type2-class4 type2-type1-class3 ".match(/\btype1-.*?(?=)/g)) 
 
// Result: ["type1-class1", "type1-class2", "type1-class3"]

Außerdem habe ich versucht, folgende:

console.log(" type1-class1 type1-class2 type2-class4 type2-type1-class3 ".match(/(?= type1-).*?(?=)/g)); 
 
// Result: ["", ""]

Wie kann ich die Erfassung am Anfang eines Regex deaktivieren ?

+1

Was meinst du mit 'deaktivieren Sie die Erfassung am Anfang eines Regex'? – evolutionxbox

+0

Müssen Sie 'String # match' statt' exec' verwenden? –

+0

Da ich (? = ...) verwenden kann, um zu vergleichen, aber nicht zu erfassen, funktioniert dies nur an der Mitte/am Ende einer Übereinstimmung, aber nicht am Anfang. Allerdings möchte ich eine Zeichenfolge zuordnen und nur einen Teil davon erhalten. Wie ich bereits erwähnt habe, möchte ich "type1-class1" und '' class1 "' und das selbe auf '" type1-class2 "' finden und '' class2' 'erhalten. – archos

Antwort

4

Ich würde eine exec Schleife verwenden. Der reguläre Ausdruck ist /(?:^|\s)type1-([^ ]+)/g, zB "Nach einer type-1, die am Anfang der Zeichenfolge oder direkt nach dem Leerzeichen steht, erfassen Sie alles bis zum nächsten Leerzeichen oder Ende der Zeichenfolge. (Mit Ihrer Zeichenfolge als gegeben, brauchen wir nicht den Wechsel mit ^, aber ich wollte für "type1-class1" am Anfang der Zeichenfolge ermöglichen) Wir haben dann die Aufnahmen in einer Schleife sammeln.

var rex = /(?:^|\s)type1-([^ ]+)/g; 
 
var str = " type1-class1 type1-class2 type2-class4 type2-type1-class3 "; 
 
var classes = []; 
 
var m; 
 
while ((m = rex.exec(str)) != null) { 
 
    classes.push(m[1]); 
 
} 
 
console.log(classes);

0

ist es das, was Sie erwarten

console.log(" type1-class1 type1-class2 type2-class4 type2-type1-class3 ".match(/ type1-.*?(?=)/g).map(x=>x.replace(/type1-/g,"").trim())) 
?
+0

Die Antworten sollten keine Fragen sein. Sagen Sie auch * was * Sie geändert haben und * warum *. –

+0

* "ist das, was Sie erwarten?" * Klar nicht, wie das OP klar sagt, er/sie will '[" class1 "," class2 "]' aber das obige gibt '[" class1 "," class2 "," class3 "]' –

+0

Aber die Idee der Nachbearbeitung mit 'map' ist nicht schlecht, könnte es wert sein, es auszuarbeiten, um dies zu einer nützlichen Antwort zu machen. –