2016-12-11 5 views
1

Ich möchte eine Regex erstellen, um URLs zu finden, die mit http: //, https: //, // beginnen, oder um URLs mit einer anderen Erweiterung als html, htm, php und php3 zu finden. URL-Abfragestrings sind optionalRegex zum Verteilen benutzerdefinierter URLs

Lasst uns sagen, dass ich will diese finden:

http://example.com 
/example.mp3 
/example.mp3?q=example 
http://example.com/example.mp3 
#example 

Und diese ablehnen:

example 
/example 
/example/ 
/example.htm 
/example.htm?q=example 
/example.mp3/example //The .mp3 needs to be extension to be accepted 
/example#example 

ich dies bereits versucht /(^(http:\/\/|https:\/\/|\/\/|#)|(.*)((.*)\.^(?!html|htm|php|php3)$)(\?.*)?$)/igm aber es hat nicht funktioniert.

Wenn das Gegenteil (das Umkehren der akzeptierten und abgelehnten Listen) leichter zu tun ist, auch das ist sehr geschätzt, kann ich die Funktion ändern, die die Regex behandelt.

+0

Es ist nicht klar, warum Sie finden möchten '# Beispiel', aber nicht'/Beispiel # Beispiel' – Oriol

+0

Ihr Beispiel und die Beschreibung der akzeptierten Parameter ist etwas anders. Möchtest du '/' oder '//' akzeptieren? – wizebin

+0

@Oriol #Beispiel kann ein Anker zu einer ID in der gleichen Seite sein und/Beispiel # Beispiel kann ein Anker sein und ID in einer anderen Seite – Ioan

Antwort

1

Es scheint, Sie

^(?:#.+|(?:https?:/)?/[^?#\n]*\.(?!(?:html?|php3?)\b)\w+(?:\?.*)?)$ 

Siehe regex demo

Musterdetails verwenden:

  • ^ - Beginn der Zeichenfolge
  • (?:#.+ - entweder ein # folgte mit irgend 1+ Zeichen
  • | - oder
  • (?:https?:/)?/[^?#\n]*\.(?!html?|php3?)\w+(?:\?.*)?) -
    • (?:https?:/)?/ - eine optionale http:/ oder https:/ und dann /
    • [^?#]* - 0+ Zeichen anders als ? und #
    • \. - ein Punkt
    • (?!(?:html?|php3?)\b)\w+ - 1 oder mehr Buchstaben/Ziffern/Unterstrich das ist nicht gleich htm, html, php oder php3
    • (?:\?.*)?) - ein optionales ? gefolgt mit irgendwelchen 0+ Zeichen
  • $ - Ende der Zeichenfolge
+1

Vielen Dank für die Antwort! Der Code schien auf den ersten Blick etwas schwieriger zu sein, aber die Erklärungen haben mich dazu gebracht, den Code besser zu verstehen. – Ioan

Verwandte Themen