使用regex从字符串中提取URL

时间:2015-08-01 08:48:26

标签: javascript regex

我想提取字符串中的第一个有效URL,它可以是字符和空格之间的任何位置

我尝试了以下

...
urlRegex: /^(http[s]?:\/\/.*?\/[a-zA-Z-_]+.*)$/,

...
var input = event.target.value // <--- some string;
var url   = input.match(this.urlRegex);

问题是url在找到url时返回整个字符串,而不是只返回与正则表达式匹配的字符串部分

实施例 字符串

https://medium.com/aspen-ideas/there-s-no-blueprint-26f6a2fbb99c random stuff sd

返回

["https://medium.com/aspen-ideas/there-s-no-blueprint-26f6a2fbb99c random stuff sd", "https://medium.com/aspen-ideas/there-s-no-blueprint-26f6a2fbb99c random stuff sd", index: 0, input: "https://medium.com/aspen-ideas/there-s-no-blueprint-26f6a2fbb99c random stuff sd"]

如何实现这一目标?

3 个答案:

答案 0 :(得分:2)

您的 regex 不正确。

正确的正则表达式用于提取URl: /(https?:\/\/[^ ]*)/

查看此fiddle

以下是摘录。

var urlRegex = /(https?:\/\/[^ ]*)/;

var input = "https://medium.com/aspen-ideas/there-s-no-blueprint-26f6a2fbb99c random stuff sd";
var url = input.match(urlRegex)[1];
alert(url);

答案 1 :(得分:2)

  • 您没有在正则表达式中包含数字作为网址的一部分。
  • 假设URL从字符串的开头
  • 开始

Live Demo左侧有正则表达式解释。

Regex explanation

var regex = /^(https?:\/\/[^/]+(\/[\w-]+)+)/;
var str = 'https://medium.com/aspen-ideas/there-s-no-blueprint-26f6a2fbb99c random stuff sd';

var url = str.match(regex)[0];
document.write(url);

答案 2 :(得分:0)

那是因为匹配结果首先匹配整个字符串,然后是组。我想你想要这个小组,所以你可以这样做:

url[1]

这是一个小提琴:http://jsfiddle.net/jgt8u6pc/1/