Flutter Dart: RegEx to extract URLs from a String
9,414
Solution 1
This may not be the complete regex, but this worked for me for randomly picked links:
void main() {
final text = """My website url: https://blasanka.github.io/
Google search using: www.google.com, social media is facebook.com, http://example.com/method?param=flutter
stackoverflow.com is my greatest website. DartPad share: https://github.com/dart-lang/dart-pad/wiki/Sharing-Guide see this example and edit it here https://dartpad.dev/3d547fa15849f9794b7dbb8627499b00""";
RegExp exp = new RegExp(r'(?:(?:https?|ftp):\/\/)?[\w/\-?=%.]+\.[\w/\-?=%.]+');
Iterable<RegExpMatch> matches = exp.allMatches(text);
matches.forEach((match) {
print(text.substring(match.start, match.end));
});
}
Result:
https://blasanka.github.io/
www.google.com
facebook.com
http://example.com/method?param=flutter
stackoverflow.com
https://github.com/dart-lang/dart-pad/wiki/Sharing-Guide
https://dartpad.dev/3d547fa15849f9794b7dbb8627499b00
Play with it here: https://dartpad.dev/3d547fa15849f9794b7dbb8627499b00
Solution 2
Try this,
final urlRegExp = new RegExp(
r"((https?:www\.)|(https?:\/\/)|(www\.))[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9]{1,6}(\/[-a-zA-Z0-9()@:%_\+.~#?&\/=]*)?");
final urlMatches = urlRegExp.allMatches(text);
List<String> urls = urlMatches.map(
(urlMatch) => text.substring(urlMatch.start, urlMatch.end))
.toList();
urls.forEach((x) => print(x));
Solution 3
Much safer to use a library like linkify instead of rolling your own regex.
/// Attempts to extract link from a string.
///
/// If no link is found, then return null.
String extractLink(String input) {
var elements = linkify(input,
options: LinkifyOptions(
humanize: false,
));
for (var e in elements) {
if (e is LinkableElement) {
return e.url;
}
}
return null;
}
Author by
dheeraj reddy
Updated on December 16, 2022Comments
-
dheeraj reddy over 1 year
This is my string:
window.urlVideo = 'https://node34.vidstreamcdn.com/hls/5d59908aea5aa101a054dec2a1cd3aff/5d59908aea5aa101a054dec2a1cd3aff.playlist.m3u8'; var playerInstance = jwplayer("myVideo"); var countplayer = 1; var countcheck = 0; playerInstance.setup({ sources: [{ "file": urlVideo }], tracks: [{ file: "https://cache.cdnfile.info/images/13f9ddcaf2d83d846056ec44b0f1366d/12.vtt", kind: "thumbnails" }], image: "https://cache.cdnfile.info/images/13f9ddcaf2d83d846056ec44b0f1366d/12_cover.jpg", }); function changeLink() { window.location = "//vidstreaming.io/load.php?id=MTM0OTgz&title=Mairimashita%21+Iruma-kun+Episode+12"; } window.shouldChangeLink = function () { window.location = "//vidstreaming.io/load.php?id=MTM0OTgz&title=Mairimashita%21+Iruma-kun+Episode+12"; }
I am using flutter dart.
How can I get window.urlVideo URL link and image URL link and .vtt file link?
Or
How can I get a list of URLs from a String? I tried finding a way with and without using RegEx but I couldn't.
Any help is apreciated
-
Her0Her0 almost 3 yearsLinkify uses the following regex right now:
r'^(.*?)((?:https?:\/\/|www\.)[^\s/$.?#].[^\s]*)'
. Based on my testing athttps://regexr.com/3e6m0
, this matcheshttps://google..............totallyrealurl,ofcourse!?
-
CHRIS LEE almost 3 yearsThis should be marked as the correct answer!
-
Kamlesh over 2 yearsI have a String
Made by https://cretezy.com
and Expected output:Made by <a href="https://cretezy.com">https://cretezy.com</a>
. Kindly suggest me how can we do this? Thanks a lot. -
Kamlesh over 2 yearsNot worked for me. I have a string which has
https://support.google.com/firebase?authuser=0#topic=6399725
url and your solution converts it to likehttps://support.google.com/firebase?authuser=0
ignoring hash and further text string#topic=6399725
. Kindly suggest how can we solve it. Thanks a lot. -
Kamlesh over 2 yearsThank you so much dear, your solution worked for me perfectly :)
-
Blasanka over 2 years@Kamlesh you can add any special char you want to the reg expression as mentioned in above comments. Based on the special char you may have to use escape character
-
Kamlesh over 2 yearsThanks @Blasanka for your reply. This solution worked perfectly for me - stackoverflow.com/a/59445736/10329023