2016-05-06 9 views
0

Ich muss „regex“ - in JavaScript - eine Zeichenfolge wie:Finden bestimmte Zeichenfolge innerhalb URL mit Regex

http://some.domain.com/v/v1.0-4/19232_102032_21111986_n.jpg?param=fejrlwfje&list=fklwefljfre 

ich 19232_102032_21111986_n extrahieren müssen, das heißt, nur der Name des Bildes zwischen http://some.domain.com/v/v1.0-4/ und .jpg?param=fejrlwfje&list=fklwefljfre , und weisen Sie es einer Variablen zu.

+0

Wenn Sie wissen, vor und nach dem Teil Ihres Spiel dann ist es kein regex – anubhava

+0

Split mit 'erfordern?', Dann dem ersten Teil mit '/' und die letzten item und strip es von '.jpg' ... Oder, ja, verwenden Sie eine Regex. –

+0

Keine Lösung funktioniert für Sie, oder? Versuchen Sie ''http://some.domain.com/v/v1.0-4/19232_102032_21111986_n.jpg?param=fejrlwfje&list=fklwefljfre'.match (/ \/([^ \ /?] +) \ .jpg (?: \? | $) /) [1] ' –

Antwort

1

Sie

\/([^\/?]+)\.jpg(?:\?|$) 

Siehe regex demo

Pattern Beschreibung verwenden können:

  • \/ - ein Schrägstrich
  • ([^\/?]+) - Gruppe 1 (Dateiname) passend zu 1 oder mehr anderen Zeichen als / und ?
  • \.jpg - ein Literal .jpg
  • (?:\?|$) - eine nicht-einfangende Gruppe Matching entweder ? oder das Ende der Zeichenfolge.

var s = 'http://some.domain.com/v/v1.0-4/19232_102032_21111986_n.jpg?param=fejrlwfje&li‌st=fklwefljfre'; 
 
var m = s.match(/\/([^\/?]+)\.jpg(?:\?|$)/); 
 
document.body.innerHTML = m ? m[1] : "No match!";

+0

Absolut die feinste Lösung, groß ist. –

0

Try this:

var s = "http://some.domain.com/v/v1.0-4/19232_102032_21111986_n.jpg?param=fejrlwfje&list=fklwefljfre" 
var result = /\/([a-z_0-9]+)\.jpg/.exec(s)[1]; 
+0

Dies wird auf URL mit nicht-ASCII-Zeichen – Richard

+0

@Richard Ich weiß. Aber es beantwortet die Frage und wird niemals etwas Unerwartetes erreichen. – k102

+0

[Es * wird * übereinstimmen, was nicht erwartet wird] (https://regex101.com/r/qW4xB2/1). –

0

Unter der Annahme, dass es keine '?' in der Zeichenfolge, die Sie anpassen möchten, können Sie versuchen:

/\/([^?/]*)(\?|$)/.exec("http://some.domain.com/v/v1.0-4/19232_102032_21111986_n.jpg?param=fejrlwfje&list=fklwefljfre")[1].slice(0,-4) 

Dadurch werden alle Zeichen übereinstimmen nach dem letzten ‚/‘, die nicht ‚/‘ oder sind ‚?‘ und davor '?' oder das Ende der Zeichenfolge.

Der Scheibenaufruf wird verwendet, um den '.jpg' Teil zu entfernen.

+0

Sie sollten die '/' im Muster entkommen. Außerdem ist '.slice (0, -4)' möglicherweise nicht der beste Weg, um die fehlende Erweiterung loszuwerden. Passen Sie die Erweiterung an. –

+0

Ich muss nicht entgangen sein, da es zwischen '' – Richard

0

Als Alternative kann es durch die Verwendung String.split, String.substr und Array.lastIndexOf Funktionen ohne regex erreicht werden:

var url = "http://some.domain.com/v/v1.0-4/19232_102032_21111986_n.jpg?param=fejrlwfje&list=fklwefljfre", 
    url_part = url.split("?")[0], 
    img_file = url_part.substr(url_part.lastIndexOf("/")+1).split(".")[0]; 

console.log(img_file); // "19232_102032_21111986_n"