使用正则表达式匹配Javascript中的字符串直到遇到空格

6
我希望能够匹配以下示例:
www.example.com
http://example.com
https://example.com

我有以下正则表达式,它不匹配www.,但会匹配http:// https://。我需要匹配上述示例中的任何前缀,并一直匹配到下一个空格为止,即整个URL。
var regx = ((\s))(http?:\/\/)|(https?:\/\/)|(www\.)(?=\s{1});

假设我有一个如下所示的字符串:
"I have found a lot of help off www.stackoverflow.com and the people on there!"
我想对该字符串进行匹配,并获得:
"www.stackoverflow.com"
谢谢!

尝试将此正则表达式用作您的表达式:/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/ - gcr15
你只想匹配它还是也需要验证? - Braj
只是匹配,我需要对其进行字符串替换。 - user1876246
你能提供一下你想要的样例输出吗? - Federico Piazza
4个回答

11

你可以尝试

(?:www|https?)[^\s]+

这里是在线演示

示例代码:

var str="I have found a lot of help off www.stackoverflow.com and the people on there!";
var found=str.match(/(?:www|https?)[^\s]+/gi);
alert(found);

模式说明:

  (?:                      group, but do not capture:
    www                      'www'
   |                        OR
    http                     'http'
    s?                       's' (optional)
  )                        end of grouping
  [^\s]+                   any character except: whitespace 
                            (\n, \r, \t, \f, and " ") (1 or more times)

对于Javascript,您必须将“+”替换为“*”,但那个答案对我帮助很大!/(?:www|https?)[^\s]*/ig是我的最终正则表达式。 - user1876246
根据您的需求使用任何一个。+用于表示一个或多个,而*用于表示零个或多个。我已在Firefox中进行了测试。它有效。 - Braj

0

首先,要匹配任何空格字符,请使用\S构造(在POSIX中,您将使用[^[:space:]],但JavaScript正则表达式不符合POSIX标准)。以下是一些常见的\S模式:

  • \S* - 零个或多个非空格字符
  • \S+ - 一个或多个非空格字符

匹配任何文本直到第一个空格可以意味着匹配除空格以外的零个或多个字符,因此,当前问题的答案是

(?:www|https?)\S*
//            ^^^

请查看正则表达式演示此模式将匹配到第一个空格或字符串结束。如果右侧必须有空格字符,请使用
(?:www|https?)\S*(?=\s)

(?=\s) 正向先行断言要求当前位置右侧紧跟着一个空格。

每当需要匹配到最后一个空格时,您可以使用任何零个或多个字符与空格\s模式进行匹配:

/(?:www|https?)[\w\W]*(?=\s)/
/(?:www|https?)[^]*(?=\s)/
// Or even (for ECMAScript 2018+):
/(?:www|https?).*(?=\s)/s

[\w\W][^]. 在使用 s 标志时匹配任何字符,包括换行符。


0

您的正则表达式存在错误。

请使用以下内容:

((\s))(http?:\/\/)|(https?:\/\/)|(www\.)(?!\s{1})
                                          ^--- Change to negative lookaround

顺便说一句,我认为你可以使用:

(?:(http?:\/\/)|(https?:\/\/)|(www\.))(?!\s{1})

MATCH 1
3.  [0-4]   `www.`
MATCH 2
1.  [16-23] `http://`
MATCH 3
2.  [35-43] `https://`

这很棒,可以匹配 www.http://https://,但只能匹配到下一个空格之前,例如:www.example.com - user1876246

0

不太确定你想做什么,但这应该匹配任何一组非空格字符,不区分大小写,并且不能紧接着前面是"www."。

/(https?:\/\/)?(?<!(www\.))[^\s]*/i

... [编辑] 但你确实想匹配 www。

/(https?:\/\/)?([^\s\.]{2,}\.?)+/i

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接