Erstellen Sie den kürzesten regulären Ausdruck, der ungefähr einer URL im Text entspricht, wenn er in JavaScript ausgeführt wird
Beispiel:
"some text exampley.com".match(/your regular expression goes here/);
Der reguläre Ausdruck muss
- Erfassen Sie alle gültigen URLs für http und https.
- Machen Sie sich keine Sorgen, dass die URL nicht mit Zeichenfolgen übereinstimmt, die nicht wirklich gültige URLs sind, wie z
super.awesome/cool
- gültig sein, wenn als JavaScript-Regex ausgeführt
Prüfkriterien:
Spiel:
- http://example.com
- http://example.com/
- http://example.com/super
- https://example.com/super
- example.com/super
- example.com
- example.com/su-per_duper/?add=yes&subtract=no
- example.com/archive/index.html
- twitter.com/#!/reply
- example.com/234ret2398oent/234nth
- codegolf.stackexchange.com/questions/464
- crazy.wow.really.example.com/?cat=nth%3E
- example-example.com
- example1.com
Nicht übereinstimmen:
- Beispiel
- Super cool
- Guten Morgen
- ich kann
- Hallo.
Hier ist ein Test, der helfen könnte, ein bisschen zu klären http://jsfiddle.net/MikeGrace/gsJyr/
Ich entschuldige mich für die Unklarheit, ich hatte nicht bemerkt, wie schrecklich übereinstimmende URLs waren.
code-golf
javascript
regular-expression
Mike Grace
quelle
quelle
\w
alles nutzen kann Erwarten Sie Rückverweise für verschiedene URL-Komponenten?/:/
den regulären Ausdruck verwenden und gültige URIs abgleichen und nicht alle Ihre Beispiele in der Liste »Nicht übereinstimmen« abgleichen. Solange Sie diesen Weg gehen, ist es einfach die Frage: Was ist der kürzeste reguläre Ausdruck, der keinem der Beispielstrings entspricht, aber dennoch alle URIs abfängt.Antworten:
passt nicht zu 3 Strings, die es nicht sollte, passt zu fast allem anderen;)
upd: passt immer noch nicht zu allen 5
quelle
Dieser funktioniert:
Besteht die Tests unter http://jsfiddle.net/9BYdp/1/
Stimmt auch überein mit:
quelle
http://user:[email protected]/path
Dies entspricht natürlich nicht Ihren Vorstellungen, entspricht jedoch Ihren Kriterien:
msgstr "stimmen mit allen gültigen URLs für http und https überein."
Ja, wird definitiv passen.
"Keine Sorge, dass die URL nicht mit Zeichenfolgen übereinstimmt, die nicht wirklich gültig sind, wie" super.awesome / cool "."
Ja, sicher, es wird viele falsche Positivmeldungen geben, aber Sie sagten, das ist egal.
gültig sein, wenn als JavaScript-Regex ausgeführt
sicher, wie Eier funktionieren, wie Sie es sagen sollten.
Wenn dieses Ergebnis NICHT die richtige Antwort ist, müssen Sie mit Ihren Kriterien selektiver vorgehen.
Um eine Regel zu sein , dass Werke , wie Sie beabsichtigen, die Sie tatsächlich tun Notwendigkeit , eine vollständige RFC - konformen Matcher, und eine vollständige RFC - konformen Matcher wird „Sorge um nicht passende“ zu implementieren.
In Bezug auf "Nicht übereinstimmende zulassen" müssen Sie daher genau angeben , welche Abweichungen von RFC zulässig sind.
Alles andere und diese ganze Übung ist eine Täuschung, weil die Leute einfach schreiben, was auch immer für sie funktioniert oder wie sie es mögen, und "irgendeinen Sinn ergeben" dafür opfern, kurz zu sein (wie ich es getan habe).
Bei deinem Update
Der naivste Regex, den ich finden kann, um all Ihre bisher eingefügten Beispiele zu vergleichen (und festzuhalten), ist:
Es ist von Natur aus recht einfach und nimmt an, dass nur drei Grundformen möglich sind.
z
kann nichts anderes sein als Leerzeichen.x
kann alles sein, kein Leerzeichen.y
kann alles sein, was weder ein Leerzeichen noch ein '/' Zeichen ist.Es gibt eine Menge Dinge, die für diese Regel gültig sind, viele, aber sie sehen für einen Menschen zumindest wie eine gültige URI aus, sie sind einfach nicht mit den Spezifikationen kompatibel.
z.B:
Ich denke, der vernünftige Ansatz besteht darin, Dinge zu extrahieren, die wahrscheinlich URIs sind, und sie dann mit etwas Strengeren zu validieren.
Die obigen Überlegungen zu diesem Beispiel finden Sie hier: http://jsfiddle.net/mHbXx/
quelle
/:/
auch nach der Bearbeitung :-)Versuch das.
Ich beziehe die führenden und nachfolgenden Schrägstriche ein, die den regulären Ausdruck begrenzen. Hoffentlich schadet das nicht meiner Zeichenanzahl!
Dieses Muster beschränkt das Protokoll entweder auf http oder https, lässt eine optionale Portnummer zu und lässt dann alle Zeichen außer Leerzeichen zu.
quelle