Javascript 用于匹配完整URL的JS正则表达式
我试图在文本字符串中匹配URL,并使用此正则表达式搜索URL:Javascript 用于匹配完整URL的JS正则表达式,javascript,regex,match,Javascript,Regex,Match,我试图在文本字符串中匹配URL,并使用此正则表达式搜索URL: /\b(https?:\/\/.*?\.[a-z]{2,4}\b)/g 问题是,它只会匹配协议和域,而不会匹配其他内容 例如: let regEx = /\b(https?:\/\/.*?\.[a-z]{2,4}\b)/g; let str = 'some text https://website.com/sH6Sd2x some more text'; console.log(str.match(regEx)); 返回: h
/\b(https?:\/\/.*?\.[a-z]{2,4}\b)/g
问题是,它只会匹配协议和域,而不会匹配其他内容
例如:
let regEx = /\b(https?:\/\/.*?\.[a-z]{2,4}\b)/g;
let str = 'some text https://website.com/sH6Sd2x some more text';
console.log(str.match(regEx));
返回:
https://website.com
我如何修改正则表达式,使其返回完整的URL
https://website.com/sH6Sd2x
工作演示:
let regEx=/\b(https?:\/\/.\.\.[a-z]{2,4}\b)/g;
让str='一些文本https://website.com/sH6Sd2x 更多的文字';
console.log(str.match(regEx))代码>由于regexp以\.[a-z]{2,4}\b
结尾,因此它只匹配URL中主机名的顶级域部分。之后,您需要匹配URL的其余部分。这将匹配其后的任何非空白字符:
let regEx = /\bhttps?:\/\/.*?\.[a-z]{2,4}\b\S*/g;
有关匹配URL的更完整的解决方案,请参阅。它停止的原因是您的表达式以\.[a-z]{2,4}
结尾,我想这是为了匹配顶级域(.com
,.net
,uk
等)。之后,它停止匹配
解决方案:将\/[^\s]*
添加到表达式中。这将进一步匹配斜杠和零个或多个非空白字符
请注意,\S
(带大写字母S)等同于[^\S]
(带小写字母S),因此请使用您最喜欢的
演示:
let regEx=/\b(https?:\/\/.\.\.[a-z]{2,4}\/[^\s]*\b)/g;
让str='一些文本https://website.com/sH6Sd2x 更多的文字';
console.log(str.match(regEx))
您的regexp以\.{a-z]{2,4}结尾\b
,因此这将只匹配URL的顶级域部分。@Barmar,是的,谢谢,我知道。我的问题是如何更改正则表达式以包含其余部分?通常的URL提取模式假设协议后没有空格。尝试一下/\bhttps?:\/\/\S+\b/g
,请参阅@WiktorStribiżew yes就是这样,非常感谢uch:)是的,这正是我想要的。非常感谢@Peter!