2016-04-09 6 views
1

Wie bekomme ich eine Verbindung mit jQuery, die ein genaues Muster am Ende davon hat? E, g, ich habe den folgenden Code:Wie öffnet man eine Verbindung mit jQuery, die ein genaues Muster am Ende davon hat?

return $(document).find("a[href='https://my_site.com/XX-' + /\d(?=\d{4})/g, "*"]"); 

So könnten die Verbindungen sein: https://my_site.com/XX-1635, https://my_site.com/XX-7432, https://my_site.com/XX-6426 und so weiter.

Mit anderen Worten, es könnte 4 Ziffern nach dem "XX-" sein.

Antwort

1

Sie können hierfür filter() verwenden.

reg = /https:\/\/my_site.com\/XX-\d{4}$/g; 
elements = $(document) 
    .find("a") 
    .filter(function(){ 
     return reg.test(this.href); 
    }); 
return elements; 
0

Wo ist die Quelle Ihrer Daten?

Ich vermute, dass die Daten, die Sie zu lesen versuchen, für den sicheren Transport kodiert sind. Hier wird der Speicherplatz beispielsweise in% 20 konvertiert.

Wenn dies der Fall ist, müssen Sie Ihre Quelldaten mithilfe von encodeURIComponent() konvertieren und dann Ihre Suche anwenden.

Dies könnte funktionieren (obwohl meine Verwendung der Suche schwach ist). Ich habe diesen Code nicht getestet, aber sollte Ihnen eine Vorstellung von der Richtung geben ...

// Collate all href from the document and store in array links 
var links=[]; 
$(document).find("a").each(
function() 
{ 
links.push(encodeURIComponent($(this).prop("href"))); 
}); 

// Loop thru array links, perform your search on each element, 
// store result in array results 
var results=[]; 
results=links.filter(function(item){ 
    return item.search('/\d(?=\d{4})/g'); 
}); 

console.log(results); 

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent

1

Sie filter() mit attribute starts with selector verwenden können.

var regex = /XX-\d{4}$/; // Exact four digits after XX- 

var anchors = $(document.body) 
    .find('a[href^="https://my_site.com/XX-"]') 
    .filter(() => regex.test(this.href)); 
0

Keine Notwendigkeit für jQuery überhaupt. Einfach kann mit reinem JS in einer einzigen Zeile erreicht werden. Es ist wahrscheinlich auch viel schneller.

var as = document.getElementsByTagName("a"), 
    ael = Array.prototype.filter.call(as, e => /XX-\d{4}$/g.test(e.href)); 
Verwandte Themen