正则表达式 - 如果组以javascript中的字符串开头,则不匹配组

jon*_*sen 5 javascript regex

我正在努力使用一些没有典型lookbehind选项的javascript中的正则表达式,如果它前面没有字符串,则只匹配一个组:

(^|)(www\.[\S]+?(?= |[,;:!?]|\.( )|$))
Run Code Online (Sandbox Code Playgroud)

所以在下面

hello http:/www.mytestwebsite.com is awesome
Run Code Online (Sandbox Code Playgroud)

我正试图检测www.mytestwebsite.com是否先于

/
Run Code Online (Sandbox Code Playgroud)

如果它是我不想匹配,否则匹配.我尝试使用前瞻但它看起来与我已经拥有的前瞻性相矛盾.

我一直在玩(?!/)在不同的地方,没有成功.

(^|)((?!&#x2f)www\.[\S]+?(?= |[,;:!?]|\.( )|$))
Run Code Online (Sandbox Code Playgroud)

如果匹配在前面,则前瞻不匹配

小智 3

由于 JS 中缺乏回溯,实现目标的唯一方法
是匹配那些也包含错误的网站/

这是因为前瞻不会推进当前位置。
只有消耗性文本的匹配才会提升位置。

但是,一个好的解决方法始终是将错误文本作为选项包含
在正则表达式中。您可以在其周围放置一些捕获组,然后测试该
组是否匹配。如果匹配,则跳过,继续下一场比赛。

这需要在 while 循环中检查每个成功的匹配。
在下面的正则表达式中,如果组 1 匹配,则不存储组 2 url,
如果不匹配,则存储组 2 url。

(/)?(www\.\S+?(?= |[,;:!?]|\.( )|$))

格式化:

 ( &\#x2f; )?                  # (1)
 (                             # (2 start)
      www\. \S+? 
      (?=
           &\#x20;
        |  [,;:!?] 
        |  \.
           ( &\#x20; )                   # (3)
        |  $ 
      )
 )                             # (2 end)
Run Code Online (Sandbox Code Playgroud)