2016-09-21 2 views
1

ich die Nummer will nach raus „pw =“ zwischen diesem TextWarum mein regex nicht in diesem speziellen Fall arbeitet

Zum Beispiel

"blablabla pw=0.5 alg=blablalbala" 

bekommen würde mir 0,5

Die Regex, dass ich wurde eingesetzt:

/.*pw=+(.*)\s+alg=.*/g 

im Zusammenhang mit Javascript, dann würde ich diese Regex in Match-Funktion verwenden, um die n zu erhalten Umbra:

str.match(/.*pw=+(.*)\s+alg=.*/g) 

Aber in regex101.com, wird das Ergebnis der Abstimmung und Highlight überhaupt nicht überein (Das Ergebnis zeigte, dass der Regex korrekt ist, während Highlight Teil nicht)

+0

loszuwerden, die 'g' Suffix – Pointy

Antwort

3

Sie sollen die /g global entfernen Modifikator, und ich schlage vor, Ihr Wert übereinstimmendes Muster [\d.]* zu präzisieren.

Der Punkt ist, dass wenn ein globaler Modifikator mit String#match verwendet wird, alle erfassten Gruppenwerte verworfen werden.

eine Regex wie

str.match(/\bpw=([\d.]*)\s+alg=/) 
       ^^^^^^  ^

Hinweis Verwenden Sie, dass Sie die .* am Anfang und Ende des Musters nicht benötigen, String#match nicht das vollständige Zeichenfolge Spiel erfordern (im Gegensatz zu String#matches() in Java).

var str = 'blablabla pw=0.5 alg=blablalbala'; 
 
var m = str.match(/\bpw=([\d.]*)\s+alg=/); 
 
if (m) { 
 
    console.log(m[1]); 
 
}

+1

Könnte auch allgemeinere gemacht werden, zum Beispiel:'/\ BPW = (\ S *)/'oder Paare passen analysiert werden später: '/ \ b ([^ \ s =] +) = (\ S *) /', dann könnte eine Schleife ein assoziatives Array daraus aufbauen. –

+0

@IsmaelLuceno: Ja, wir können diesen Ausdruck weiter verbessern, sagen wir, verwende eine präzisere Regex für eine Zahl wie '[- +]? [0-9] * \.? [0-9] + ([eE ] [- +]? [0-9] +)? 'Anstelle von' [\ d.] ', Und dann' \ s + alg = 'in' \ s + \ w + = 'oder' (?: \ s + \ w + = | \ s * /?>) '... Wir haben einfach keine weiteren Details zum Kontext und ob die Eingabe vorab validiert wurde oder nicht. –

+0

In Ihrem Code bedeutet das in der ersten Position von m, gibt es etwas anderes? Ursache, wenn ich str.match() in Javascript verwende, gibt es ein Array zurück und 1 davon ist "pw = 0.8 alg =". Ich verstehe nicht, warum –

Verwandte Themen