javascript - 提取字符串中的链接并返回对象数组

标签 javascript url text extract

我从服务器接收到一个字符串,该字符串包含文本和链接(主要以 http://、https://和 www. 开头,很少有不同,但如果它们不同也无所谓)。

例子:

"simple text simple text simple text domain.ext/subdir again text text text youbank.com/transfertomealltheirmoney/witharegex text text text and again text"

我需要一个执行以下操作的 JS 函数: - 找到所有链接(无论是否有重复); - 返回一个对象数组,每个对象代表一个链接,以及返回链接在文本中的开始位置和结束位置的键,例如:

[{link:"http://www.dom.ext/dir",startsAt:25,endsAt:47},
{link:"https://www.dom2.ext/dir/subdir",startsAt:57,endsAt:88},
{link:"www.dom.ext/dir",startsAt:176,endsAt:192}]

这可能吗?怎么办?

编辑:@Touffy:我试过了,但我无法得到任何字符串的长度,只有起始索引。此外,这不会检测到 www: var str = string with many links (SO does not let me post them)" var regex =/(\b(https?|ftp|file|www):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[- A-Z0-9+&@#\/%=~_|])/ig; var 结果,索引 = []; while ( (result = regex.exec(str)) ) { indices.push({startsAt:result.index}); }; console.log(指数[0].link);console.log(指数[1].link);

最佳答案

解决这个问题的一种方法是使用正则表达式。假设无论输入什么,你都可以做类似的事情

 var expression = /(https?:\/\/(?:www\.|(?!www))[^\s\.]+\.[^\s]{2,}|www\.[^\s]+\.[^\s]{2,})/gi;
 var matches = input.match(expression);

然后,您可以使用 indexOf

遍历匹配项以发现起点和终点
for(match in matches)
    {
        var result = {};
        result['link'] = matches[match];
        result['startsAt'] = input.indexOf(matches[match]);
        result['endsAt'] = 
            input.indexOf(matches[match]) + matches[match].length;
     }

当然,您可能需要修改正则表达式本身以满足您的特定需求。

您可以在这个 fiddle 中看到控制台记录的结果

关于javascript - 提取字符串中的链接并返回对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29718962/

相关文章:

python - 在大空白处分割 Pandas

javascript - 正确的方法 Javascript PHP MySQL

java - 如何在 RESTful API 中查找该 API 的 URL

javascript - 通过 URL 和 AJAX 进行内部密码保护?

HTML & CSS : Adjust background rectangle on text so it does not span entire webpage

c# - 读取单元格的文本而不是值

javascript - 如何使用 knockout.js 管理和渲染嵌套数组?

javascript - Frame Buster Buster ...需要破坏代码

javascript - Django 和 AngularJS

java用井号而不是问号解析url