[JavaScript] RegEX
Hallo zusammen,
hat jemand von euch in Javascript etwas erfahrung? Ich möchte mit RegEx einen bestimmten teil einer URL ausgeben:
Es geht um die Kanallinks von Youtube. Ein Kanallink sieht Beispielsweise so aus:
Dabei wäre das was ich brauche (Hier ROT):
http://www.youtube.com/user/gameinsidesh…ngbase#p/a/u/1/9EI6EmMdvVc
Man muss auch beachten das "u/1/" sich auch immer verändert
Ich möchte die URL aber dann so ausgeben:
http://www.youtube.com/watch?v=9EI6EmMdvVc
Hat da jemand eventuell ein Codeschnipsel für mich?
hat jemand von euch in Javascript etwas erfahrung? Ich möchte mit RegEx einen bestimmten teil einer URL ausgeben:
Es geht um die Kanallinks von Youtube. Ein Kanallink sieht Beispielsweise so aus:
|
|
Quellcode |
1 |
http://www.youtube.com/user/gameinsideshow?blend=1&ob=video-mustangbase#p/a/u/1/9EI6EmMdvVc |
Dabei wäre das was ich brauche (Hier ROT):
http://www.youtube.com/user/gameinsidesh…ngbase#p/a/u/1/9EI6EmMdvVc
Man muss auch beachten das "u/1/" sich auch immer verändert
Ich möchte die URL aber dann so ausgeben:
http://www.youtube.com/watch?v=9EI6EmMdvVc
Hat da jemand eventuell ein Codeschnipsel für mich?
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Sumale.nin« (19. Januar 2012, 12:41)
Hallo Sumale.nin,
wenn der für dich interessante Teil der URL tatsächlich immer am Ende der URL nach einem Slash steht, dann brauchst du dafür eigentlich kein Regex. Du müsstest dir nur den Index des letzten Slash (Stichwort indexOf-Funktion) in der Zeichenkette ermitteln und ab da alle Zeichen aus dem String herausschneiden. Sollte deutlich weniger aufwendig und fehleranfällig sein als RegEx, besonders dann wenn sich die URL immer mal ändert (was nicht heißt, dass es mit RegEx nicht gehen würde
)
Grtz
wenn der für dich interessante Teil der URL tatsächlich immer am Ende der URL nach einem Slash steht, dann brauchst du dafür eigentlich kein Regex. Du müsstest dir nur den Index des letzten Slash (Stichwort indexOf-Funktion) in der Zeichenkette ermitteln und ab da alle Zeichen aus dem String herausschneiden. Sollte deutlich weniger aufwendig und fehleranfällig sein als RegEx, besonders dann wenn sich die URL immer mal ändert (was nicht heißt, dass es mit RegEx nicht gehen würde
)Grtz
[Bevor du jemanden mit Füßen trittst, überleg ob du einem eventuellen Echo gewachsen bist]
Hallo Hightek,
mein Script sieht komplett so aus:
Eingebaut ist es aktuell so:
Die Ausgabe wird dann über diesen Erzeugt:
'+yt_kanallink+'
Es wird mir lediglich "-1" ausgegeben. Und nicht die ID
Edit://
Ich sehe jetzt gerade aber, das die URL so ausgegeben wird:
mein Script sieht komplett so aus:
|
|
Javascript-Quelltext |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
(function () { var youtube2mp3pathfilsh ='http://www.filsh.net/?url='+encodeURIComponent(document.URL); var youtube2mp3path ='http://www.video2mp3.net/?url='+encodeURIComponent(document.URL); var youtube2mp3path_hq ='http://www.video2mp3.net/?url='+encodeURIComponent(document.URL)+"&hq=1"; var youtube2mp3path_shrk ='http://shrk.biz/api_big.php?key=4f162e7eca862f863c5e211cab68f2a1&uid=1&adtype=int&url='+encodeURIComponent(document.URL); var direct_url = encodeURIComponent(document.URL); var yt_kanallink = direct_url.indexOf('/'); var div_embed1 = document.getElementById('watch-headline-user-info'); var div_embed2 = document.getElementById('user_banner'); if (div_embed1) { div_embed1.innerHTML = div_embed1.innerHTML + " <button data-tooltip-text=\"Teile das Video über einem Kurzen Link\" type=\"button\" class=\"subscribe-button yt-uix-button yt-uix-tooltip\" onclick=\"window.open('"+youtube2mp3path_shrk+"');\" title=\"Teile das Video mit einem Kurzen Link\" data-loaded=\"true\" data-button-action=\"yt.www.subscriptions.button.toggleMenu\" role=\"button\"><span class=\"yt-uix-button-content\" style=\"font-weight:bold;\">Teilen<\/span><\/button> "; div_embed1.innerHTML = div_embed1.innerHTML + "<button data-tooltip-text=\"Das Video in standard MP3 Qualität umwandel und herunterladen\" type=\"button\" class=\"subscribe-button yt-uix-button yt-uix-tooltip\" onclick=\"window.open('"+youtube2mp3path+"');\" title=\"Das Video in standard MP3 Qualität umwandel und herunterladen\" data-loaded=\"true\" data-button-action=\"yt.www.subscriptions.button.toggleMenu\" role=\"button\"><span class=\"yt-uix-button-content\" style=\"font-weight:bold;\">Als <font color=\"#FF3333\">MP3</font> laden<\/span><\/button> "; div_embed1.innerHTML = div_embed1.innerHTML + "<button data-tooltip-text=\"Das Video in hoher MP3 Qualität umwandel und herunterladen\" type=\"button\" class=\"subscribe-button yt-uix-button yt-uix-tooltip\" onclick=\"window.open('"+youtube2mp3path_hq+"');\" title=\"Das Video in hoher MP3 Qualität umwandel und herunterladen\" data-loaded=\"true\" data-button-action=\"yt.www.subscriptions.button.toggleMenu\" role=\"button\"><span class=\"yt-uix-button-content\" style=\"font-weight:bold;\">Als <font color=\"#FF3333\">MP3</font> laden (HQ)<\/span><\/button> "; div_embed1.innerHTML = div_embed1.innerHTML + "<button data-tooltip-text=\"Video in verschiedener Qualität und Formate downloaden\" type=\"button\" class=\"subscribe-button yt-uix-button yt-uix-tooltip\" onclick=\"window.open('"+youtube2mp3pathfilsh+"');\" title=\"Video in verschiedener Qualität und Formate downloaden\" data-loaded=\"true\" data-button-action=\"yt.www.subscriptions.button.toggleMenu\" role=\"button\"><span class=\"yt-uix-button-content\" style=\"font-weight:bold;\">Als <font color=\"#FF3333\">Video+</font> laden (HQ)<\/span><\/button> "; } if (div_embed2) { div_embed2.innerHTML = div_embed2.innerHTML + '<a href="#">'+yt_kanallink+'</a>'; } })(); |
Eingebaut ist es aktuell so:
|
|
Javascript-Quelltext |
1 2 |
var direct_url = encodeURIComponent(document.URL); var yt_kanallink = direct_url.indexOf('/'); |
Die Ausgabe wird dann über diesen Erzeugt:
'+yt_kanallink+'
Es wird mir lediglich "-1" ausgegeben. Und nicht die ID
Edit://
Ich sehe jetzt gerade aber, das die URL so ausgegeben wird:
|
|
Quellcode |
1 |
http%3A%2F%2Fwww.youtube.com%2Fuser%2Fgameinsideshow%3Fblend%3D1%26ob%3Dvideo-mustangbase%23p%2Fa%2Fu%2F0%2FUzPFchH7ytk |
Du hast in deiner jetzigen Umsetzung m.M.n nach 2 Fehler drin...
1. Das Suchen von Zeichen innerhalb der URL solltest du machen, bevor du die Funktion encodeURIComponent aufrufst. Durch diesen Funktionsaufruf werden Sonderzeichen in der URL wie z.B. , / ? : @ & = + $ # encodiert.
2. Du verwendest die Funktion indexOf() falsch. Diese Funktion ermittelt dir den Index der angegebenen Zeichenkette in einer Zeichenkette und gibt dir -1 zurück, wenn diese nicht vorhanden ist. Demnach solltest du dir die einzelnen Funktion und was sie tatsächlich tun evtl. nochmal genauer anschauen
Folgender Beispielcode sollte demnach zeigen, wie es gehen könnte (ohne Anspruch auf absolute Fehlerfreiheit
):
Ist an sich auch nix magisches...Es wird innerhalb der angegebenen URL der letzte vorkommende Slash (/) via lastIndexOf() gesucht und ab dessen Index der Rest der Zeichenkette via substring ausgeschnitten und in die Variable part gepackt. Um das Ganze wartbarer zu machen, kann man das nun natürlich noch in eine Funktion / Methode auslagern und somit leicht wieder verwenden..Aber das Ganze soll ja nur n Beispiel sein
Hoff das hilft dir weiter und sorgt für den ein oder anderen erhellenden Moment.
Grtz
1. Das Suchen von Zeichen innerhalb der URL solltest du machen, bevor du die Funktion encodeURIComponent aufrufst. Durch diesen Funktionsaufruf werden Sonderzeichen in der URL wie z.B. , / ? : @ & = + $ # encodiert.
2. Du verwendest die Funktion indexOf() falsch. Diese Funktion ermittelt dir den Index der angegebenen Zeichenkette in einer Zeichenkette und gibt dir -1 zurück, wenn diese nicht vorhanden ist. Demnach solltest du dir die einzelnen Funktion und was sie tatsächlich tun evtl. nochmal genauer anschauen

Folgender Beispielcode sollte demnach zeigen, wie es gehen könnte (ohne Anspruch auf absolute Fehlerfreiheit
):|
|
Javascript-Quelltext |
1 2 3 4 5 |
var url = "http://www.youtube.com/user/gameinsidesh…ngbase#p/a/u/1/9EI6EmMdvVc"; var index = url.lastIndexOf("/"); var part = url.substring(index + 1, url.length); alert(part); //Gibt '9EI6EmMdvVc' aus |
Ist an sich auch nix magisches...Es wird innerhalb der angegebenen URL der letzte vorkommende Slash (/) via lastIndexOf() gesucht und ab dessen Index der Rest der Zeichenkette via substring ausgeschnitten und in die Variable part gepackt. Um das Ganze wartbarer zu machen, kann man das nun natürlich noch in eine Funktion / Methode auslagern und somit leicht wieder verwenden..Aber das Ganze soll ja nur n Beispiel sein

Hoff das hilft dir weiter und sorgt für den ein oder anderen erhellenden Moment.
Grtz
[Bevor du jemanden mit Füßen trittst, überleg ob du einem eventuellen Echo gewachsen bist]
Danke für deine Hilfe!
So funktioniert das nun so weit.
Jetzt habe ich das Problem, das wenn ich in der Kanalseite (Beispiel: http://www.youtube.com/user/gameinsidesh…u/0/UzPFchH7ytk) rumsurfe, wird mir in diesem Fall "UzPFchH7ytk" ausgegeben. Klicke ich innerhalb der Kanalseite auf ein anderes Video (Biepsiel: http://www.youtube.com/user/gameinsidesh…u/1/9EI6EmMdvVc), dann wird mir "UzPFchH7ytk" + "9EI6EmMdvVc" ausgegeben, also "UzPFchH7ytk9EI6EmMdvVc", wie kann ich das verhindern?
So funktioniert das nun so weit.
|
|
Javascript-Quelltext |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
// ==UserScript== // @name Youtube 2 MP3 Converter v1.4 // @namespace http://browser.sumale.biz // @description Videos von Youtube in MP3 oder mehr umwandeln. By Benny Böhnke // @include http://youtube.com/* // @include http://*.youtube.com/* // @include https://youtube.com/* // @include https://*.youtube.com/* // @include http://youtube.de/* // @include http://*.youtube.de/* // @include https://youtube.de/* // @include https://*.youtube.de/* // ==/UserScript== (function () { var url = decodeURIComponent(document.URL); var index = url.lastIndexOf("/"); var part = url.substring(index + 1, url.length); var youtube2mp3pathfilsh ='http://www.filsh.net/?url='+encodeURIComponent(document.URL); var youtube2mp3path ='http://www.video2mp3.net/?url='+encodeURIComponent(document.URL); var youtube2mp3path_hq ='http://www.video2mp3.net/?url='+encodeURIComponent(document.URL)+"&hq=1"; var youtube2mp3path_shrk ='http://shrk.biz/api_big.php?key=4f162e7eca862f863c5e211cab68f2a1&uid=1&adtype=int&url='+encodeURIComponent(document.URL); var div_embed1 = document.getElementById('watch-headline-user-info'); var div_embed2 = document.getElementById('user_banner'); if (div_embed1) { div_embed1.innerHTML = div_embed1.innerHTML + " <button data-tooltip-text=\"Teile das Video über einem Kurzen Link\" type=\"button\" class=\"subscribe-button yt-uix-button yt-uix-tooltip\" onclick=\"window.open('"+youtube2mp3path_shrk+"');\" title=\"Teile das Video mit einem Kurzen Link\" data-loaded=\"true\" data-button-action=\"yt.www.subscriptions.button.toggleMenu\" role=\"button\"><span class=\"yt-uix-button-content\" style=\"font-weight:bold;\">Teilen<\/span><\/button> "; div_embed1.innerHTML = div_embed1.innerHTML + "<button data-tooltip-text=\"Das Video in standard MP3 Qualität umwandel und herunterladen\" type=\"button\" class=\"subscribe-button yt-uix-button yt-uix-tooltip\" onclick=\"window.open('"+youtube2mp3path+"');\" title=\"Das Video in standard MP3 Qualität umwandel und herunterladen\" data-loaded=\"true\" data-button-action=\"yt.www.subscriptions.button.toggleMenu\" role=\"button\"><span class=\"yt-uix-button-content\" style=\"font-weight:bold;\">Als <font color=\"#FF3333\">MP3</font> laden<\/span><\/button> "; div_embed1.innerHTML = div_embed1.innerHTML + "<button data-tooltip-text=\"Das Video in hoher MP3 Qualität umwandel und herunterladen\" type=\"button\" class=\"subscribe-button yt-uix-button yt-uix-tooltip\" onclick=\"window.open('"+youtube2mp3path_hq+"');\" title=\"Das Video in hoher MP3 Qualität umwandel und herunterladen\" data-loaded=\"true\" data-button-action=\"yt.www.subscriptions.button.toggleMenu\" role=\"button\"><span class=\"yt-uix-button-content\" style=\"font-weight:bold;\">Als <font color=\"#FF3333\">MP3</font> laden (HQ)<\/span><\/button> "; div_embed1.innerHTML = div_embed1.innerHTML + "<button data-tooltip-text=\"Video in verschiedener Qualität und Formate downloaden\" type=\"button\" class=\"subscribe-button yt-uix-button yt-uix-tooltip\" onclick=\"window.open('"+youtube2mp3pathfilsh+"');\" title=\"Video in verschiedener Qualität und Formate downloaden\" data-loaded=\"true\" data-button-action=\"yt.www.subscriptions.button.toggleMenu\" role=\"button\"><span class=\"yt-uix-button-content\" style=\"font-weight:bold;\">Als <font color=\"#FF3333\">Video+</font> laden (HQ)<\/span><\/button> "; } if (div_embed2) { div_embed2.innerHTML = div_embed2.innerHTML + ''+part+''; } })(); |
Jetzt habe ich das Problem, das wenn ich in der Kanalseite (Beispiel: http://www.youtube.com/user/gameinsidesh…u/0/UzPFchH7ytk) rumsurfe, wird mir in diesem Fall "UzPFchH7ytk" ausgegeben. Klicke ich innerhalb der Kanalseite auf ein anderes Video (Biepsiel: http://www.youtube.com/user/gameinsidesh…u/1/9EI6EmMdvVc), dann wird mir "UzPFchH7ytk" + "9EI6EmMdvVc" ausgegeben, also "UzPFchH7ytk9EI6EmMdvVc", wie kann ich das verhindern?
Hello again!
Der Fehler sollte sich in dieser Zeile finden lassen...
Dort nimmst du den HTML-Inhalt aus div_embed2 und hängst hinten immer nur den Teil aus der URL dran. Stattdessen müsstest du hier den Inhalt des DIV komplett ersetzen und die neu erzeugt URL einfügen!
Grtz
Der Fehler sollte sich in dieser Zeile finden lassen...
|
|
Javascript-Quelltext |
1 2 3 |
if (div_embed2) { div_embed2.innerHTML = div_embed2.innerHTML + ''+part+''; } |
Dort nimmst du den HTML-Inhalt aus div_embed2 und hängst hinten immer nur den Teil aus der URL dran. Stattdessen müsstest du hier den Inhalt des DIV komplett ersetzen und die neu erzeugt URL einfügen!
Grtz
[Bevor du jemanden mit Füßen trittst, überleg ob du einem eventuellen Echo gewachsen bist]
Ähnliche Themen
-
Aktuelle Version [1.6.5] »-
1.6.5 Nur Ziffern als Benutzernamen zulassen
(15. November 2011, 14:52)
-
Web | Programmierung »-
[PHP] Nach X Sekunden soll ein Bild/Text angezeigt werden
(4. August 2010, 07:11)
-
alte Versionen [1.6.03|1.6.1|1.6.4] »-
pkSpellCheck
(19. Februar 2009, 10:44)
-
Web | Allgemein »-
Bannerwechsel auf Knopfdruck
(14. Juli 2008, 22:07)
-
alte Versionen [1.6.03|1.6.1|1.6.4] »-
IM-Center- PW abfrage und Benutzer nicht gefunden
(12. März 2008, 19:36)


