我正在努力使用一些没有典型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)
如果它是我不想匹配,否则匹配.我尝试使用前瞻但它看起来与我已经拥有的前瞻性相矛盾.
我一直在玩(?!/)在不同的地方,没有成功.
(^|)((?!/)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)