Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于匹配完整URL的JS正则表达式_Javascript_Regex_Match - Fatal编程技术网

Javascript 用于匹配完整URL的JS正则表达式

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

我试图在文本字符串中匹配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));
返回:

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!