使用正则表达式提取网址而不合并

时间:2018-11-04 23:52:15

标签: javascript regex

我正在使用以下代码从名为description的字符串变量中提取URL。可以,但是它将合并重复的URL。

let geturl = new RegExp(/(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)(?:\([-A-Z0-9+&@#\/%=~_|$?!:,.]*\)|[-A-Z0-9+&@#\/%=~_|$?!:,.])*(?:\([-A-Z0-9+&@#\/%=~_|$?!:,.]*\)|[A-Z0-9+&@#\/%=~_|$])/igm);

let urlExtracted = description.match(geturl);

是否有任何方法可以更改代码,以便即使它们重复出现,也可以按照在变量中找到URL的顺序提取所有URL?

1 个答案:

答案 0 :(得分:0)

根据字符串和模式创建一个tokenized match object,然后将该令牌对象转换为列表。

刚刚意识到我建议的答案使用与您的问题相同的代码。但是我尝试了this code pen中使用的代码,但无法通过以下示例复制错误:

var y = "https://www.youtube.com/watch?v=tIM-kdmKhnE  https://codepen.io/hellopravin/pen/NqLgqB  hi https://stackoverflow.com/questions/8441915/tokenizing-strings-using-regular-expression-in-javascript  https://www.youtube.com/watch?v=tIM-kdmKhnE";
var regex = /(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)(?:\([-A-Z0-9+&@#\/%=~_|$?!:,.]*\)|[-A-Z0-9+&@#\/%=~_|$?!:,.])*(?:\([-A-Z0-9+&@#\/%=~_|$?!:,.]*\)|[A-Z0-9+&@#\/%=~_|$])/igm;

var match = y.match(regex);
//document.write(Array.from(match));
document.write(match);