У меня есть выражение регулярного выражения для поиска URL-адресов в строке, но когда я использую его с String.prototype.split (), он возвращает неопределенные.
const regex = /(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/g;
const str = "yay http://www.google.com woo www.google.com haha google.com";
console.log(str.match(regex));
// [ 'http://www.google.com', 'www.google.com', 'google.com' ]
console.log(str.split(regex));
// [ 'yay ','http://w',undefined,undefined,'',' woo ',undefined,undefined,'www.','',' haha ',undefined,undefined,undefined,'','' ]
После некоторых исследований выясняется, что это связано с захватом групп. Я попытался добавить :?
ко всем группам захвата (части, заключенные в скобки), и он удалил неопределенные.
const reg2 = /(?:http(?:s)?:\/\/.)?(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b(?:[-a-zA-Z0-9@:%_\+.~#?&//=]*)/g
const str = "yay http://www.google.com woo www.google.com haha google.com";
console.log(str.split(reg2));
// [ 'yay ', ' woo ', ' haha ', '' ]
Но в нем пропущены URL-адреса. Я ожидаю возвращения:
[ 'yay ', 'http://www.google.com', ' woo ', 'www.google.com', ' haha ', 'google.com' ]