JS - A link-cserélő függvény hibásan illeszkedik az url végére
2022-05-23T15:22:45+02:00
2022-05-23T20:09:58+02:00
2022-06-29T08:07:40+02:00
Prison break
Sziasztok!

Az alább link-cserélő, kisebb függvény némely esetben hibásan cseréli le az adott url-t.

function url(str){ return str.replace(/((?:https?|ftp):\/\/([^\/]+)\S*)/ig,(full,m1,m2)=>{ return `<a href="${full}" target="_blank">${full}</a>`; }); }
Írtam nyolc különböző esetet, amelyből négy hibás, helytelenül cseréli le a string-ből az url-t linkké.

0. http://valami.hu [új sor] /////////////////////////////////////////////////////////////////////////////// 1. http://valami.hu [szóköz] aaa [új sor] /////////////////////////////////////////////////////////////////////////////// 2. http://valami.hu/ [szóköz] bbb [új sor] /////////////////////////////////////////////////////////////////////////////// 3. http://valami.hu/stb [szóköz] ccc [új sor] /////////////////////////////////////////////////////////////////////////////// 4. http://valami.hu?id=1 [szóköz] ddd [új sor] /////////////////////////////////////////////////////////////////////////////// 5. http://valami.hu/?id=2 [szóköz] eee [új sor] /////////////////////////////////////////////////////////////////////////////// 6. http://valami.hu?id=3&abc=xyz [szóköz] fff [új sor] /////////////////////////////////////////////////////////////////////////////// 7. http://valami.hu/index.php?id=4&abc=xyz [szóköz] ggg [új sor] .....

Kép formában is csatolom a fenti példákat, hogy egyértelműen látszódjon problémás, valamint a jól működő url variációk megjelenésük.
---> [ KÉP ] <---

A 0., 1., 4., és a 6. url mintában hibás a lecserélt link.
Jellemzően akkor hibás, ha az url nem perjellel (hanem szimplán szóközzel, vagy új sorral) végződik, de ez sem minden esetben igaz, lásd a 3., 5. és 7. példámat, ahol jól működik a link cserélése.

Tehát, szerintem a regexp-ben, valahol az url végére illeszkedő reguláris kifejezésben bújik meg a hiba, illetve a probléma megoldása.

Szerintetek miként lehetne a regexp-et úgy módosítani, hogy az említett hibás esetekre is jól működjön a link-csere?


Nagy segítség lenne számomra, ha találnánk megoldást erre!

Köszönöm szépen!
Mutasd a teljes hozzászólást!
Hali!

Tehát, szerintem a regexp-ben, valahol az url végére illeszkedő reguláris kifejezésben bújik meg a hiba, illetve a probléma megoldása.

Ez elég egyértelmű.

Szerintetek miként lehetne a regexp-et úgy módosítani, hogy az említett hibás esetekre is jól működjön a link-csere?

Mondjuk úgy, hogy a whitespace-eket is beveszed az „URL vége jelzésbe” (hiszen, elvileg, úgysem lehetne benne). Azaz:
/((?:https?|ftp):\/\/([^\/\s]+)\S*)/ig
Mutasd a teljes hozzászólást!

abcd