使用Javascript从字符串中提取URL

3
这听起来像是你可以通过谷歌轻松解决的问题,但我已经搜索了几个小时。
基本上,我有一个字符串正在从另一个网站进行AJAX请求。
'function onclick(event) { toFacebook("http://www.domain.com.au/deal/url-test?2049361208?226781981"); }'

这是因为我正在提取onclick。我只想从字符串中提取URL。

任何帮助都将不胜感激。

----编辑----

如果我去这里..http://regexlib.com/RESilverlight.aspx正则表达式在线测试器

并运行此正则表达式。

(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?

在我的字符串中,它完美地突出了URL...但我只是不能用JS运行它?

4
在我看来,这个字符串就是URL... - Skilldrick
可能是重复的问题,与https://dev59.com/VHM_5IYBdhLWcg3w-4hg相似。 - Robusto
6个回答

3

如果它总是带有破折号(我假设您想要破折号之前的所有内容),您可以使用split方法:

var arr = split(val);

您的数据将在arr [0]中。


0
 var urlRegex = /(http?:\/\/[^\s]+)/g;

    var testUrl = text.match(urlRegex);

    if (testUrl === null) {

    return "";

      }else {

    var urlImg = testUrl[0];

    return urlImg;

     }

0

你可以在 JavaScript 中使用这些函数:

function parseUrl1(data) {
var e=/^((http|ftp):\/)?\/?([^:\/\s]+)((\/\w+)*\/)([\w\-\.]+\.[^#?\s]+)(#[\w\-]+)?$/;

if (data.match(e)) {
    return  {url: RegExp['$&'],
            protocol: RegExp.$2,
            host:RegExp.$3,
            path:RegExp.$4,
            file:RegExp.$6,
            hash:RegExp.$7};
}
else {
    return  {url:"", protocol:"",host:"",path:"",file:"",hash:""};
}
}

function parseUrl2(data) {
var e=/((http|ftp):\/)?\/?([^:\/\s]+)((\/\w+)*\/)([\w\-\.]+\.[^#?\s]+)(#[\w\-]+)?/;

if (data.match(e)) {
    return  {url: RegExp['$&'],
            protocol: RegExp.$2,
            host:RegExp.$3,
            path:RegExp.$4,
            file:RegExp.$6,
            hash:RegExp.$7};
}
else {
    return  {url:"", protocol:"",host:"",path:"",file:"",hash:""};
}
}

参考资料:http://lawrence.ecorp.net/inet/samples/regexp-parse.php


相同,某些东西出错,空对象。 - askon

0

最终只是做了这个

$a.substring($a.indexOf("http:"), $a.indexOf("?"))

正则表达式超出了我的能力范围。


0

yourFunction.toString().split("'")[1] 完成任务。


-3

编辑: 这里有另一种解决方案,可以提取URL:

var function = 'function onclick(event) { toFacebook("http://www.domain.com.au/deal/url-test?2049361208?226781981"); }'
function.match(/(http:[^"]+)/)[0]

旧答案: 使用正则表达式:

从锚标签中提取锚文本和URL的JavaScript正则表达式

var url_match = /https?:\/\/([-\w\.]+)+(:\d+)?(\/([\w/_\.]*(\?\S+)?)?)?/;

alert(url_match.test("http://stackoverflow.com"));

确切地说,这只返回是否与正则表达式匹配,而不是部分。 - Eduard Luca

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接