【发布时间】:2015-04-18 14:58:24
【问题描述】:
我从服务器收到一个字符串,该字符串包含文本和链接(主要以 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 result, indices = [];
while ( (result = regex.exec(str)) ) {
indices.push({startsAt:result.index});
}; console.log(indices[0].link);console.log(indices[1].link);
【问题讨论】:
-
是的,有可能!
-
@adeneo:非常好的评论,谢谢! ;-)
-
请显示输入示例
-
既然您知道这是可能的,那么您可以尝试一下。如果您这样做时它不起作用,您可以发布您的代码,我们将解释原因。 (提示:使用
indexOf或match字符串方法) -
@Touffy:你说得对,我会尽快做的
标签: javascript url text extract