2012-04-04 7 views
4

Versuch, ein JavaScript-Bookmarklet zu schreiben, um von einem Front-End-Link in einen CMS-Bearbeitungsseiten-Link zu springen.URL mit Bookmarklet ändern

nehmen also eine URL wie dieser

http://www.example.com/events/13097/article

und machen Sie eine URL wie dieser

http://www.example.com/admin/edit.php?class=events&id=13097

Ich glaube, ich brauche Regex zu verwenden, um die Klasse und ID zu packen und dann wickeln es in eine Javascript-Funktion - aber ich bin ein absoluter Anfänger und frage mich, ob jemand mich anfangen kann?

+0

können Sie auch in mod_rewrite aussehen, wenn Sie apache verwenden (diese Seite auf dem Server zu tun, eher auf Client-Seite als Berufung). –

Antwort

4

Sie tun regex nicht Notwendigkeit, versuchen:

var url = ""+window.location; 
var urlparts = url.split('/'); 
window.location = "http://www.example.com/admin/edit.php?class="+urlparts[3]+"&id="+urlparts[4]; 

teilt die Klasse und die ID aus der URL und wiederholt sie in der Umleitung. die erste Zeile wandelt die window.location in eine Zeichenfolge, die Sie auch String(window.location) verwenden können, um dies zu tun, aber das ist ausführlicher.

die Domain zu erhalten, können Sie verwenden:

"http://"+urlparts[2]+"/admin/edit.php?class="+urlparts[3]+"&id="+urlparts[4] 

EDIT: Eigentlich kann man die urlparts mit window.location.href.split('/') erhalten oder den ursprünglichen Code window.location.toString().split('/') andere Elemente von Interesse in den window.location object (Beispiele zu emulieren von this Post)

hash: "#10013173" 
host: "stackoverflow.com" 
hostname: "stackoverflow.com" 
href: "https://stackoverflow.com/questions/10012966/change-url-with-bookmarklet/10013173#10013173" 
origin: "http://stackoverflow.com" 
pathname: "https://stackoverflow.com/questions/10012966/change-url-with-bookmarklet/10013173" 
port: "" 
protocol: "http:" 
search: "" 
+0

Vielen Dank - das war perfekt! –

0

Hier ist ein Beispiel für den Regex zur Verwendung in einem C# Unit-Test. Da Sie sich mit Regex nicht auskennen, ist das Muster dasselbe wie Ihre Quell-URL, außer mit zwei capture groups: eins für die Klasse (?<class>[^/]+) und eins für die ID (?<id>[^/]+). Wie jeder funktioniert, ist, dass es ein oder mehrere Zeichen (das Pluszeichen) braucht, das kein Schrägstrich (^/) ist, und speichert es in einer Regex-Gruppe des Namens in den spitzen Klammern. diese

var source = "http://www.domain.com/events/13097/article"; 
var expected = "http://www.domain.com/admin/edit.php?class=events&id=13097"; 
var pattern = "http://www.domain.com/(?<class>[^/]+)/(?<id>[^/]+)/article"; 
var r = new Regex(pattern); 
var actual = r.Replace(source, "http://www.domain.com/admin/edit.php?class=${class}&id=${id}"); 
Assert.AreEqual(expected, actual); 
+0

Danke für Ihre Hilfe! –

0
//var str = window.location.href; 
var str = "http://www.example.com/events/13097/article"; 
var re = /events\/(\d+)\//; 
var match = str.match(re); 
var newURL = "http://www.example.com/admin/edit.php?class=events&id=" + match[1]; 
alert(newURL); 
+0

Danke für Ihre Hilfe! –