繁体   English   中英

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

[英]Regex - Don't match a group if it starts with a string in javascript

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

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

所以在下面

hello http:/www.mytestwebsite.com is awesome

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

/

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

我一直在玩(?!&#x2f)在不同的地方,没有成功。

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

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

由于JS缺乏外观 ,是实现目标的唯一途径
是匹配那些包含错误/ 同样。

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

但是,一个好的解决方法一直是将错误的文本作为一个选项
在正则表达式内。 你会在它周围放置一些捕获组,然后进行测试
比赛组。 如果匹配,请跳过,继续下一场比赛。

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

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

格式:

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

另一个选择(我已经完成零性能测试)将使用带有正则表达式的string.replace()和作为第二个参数的回调。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace

然后,在replace函数内部,使用传递给回调的offset参数(请参阅上面的文档)预先添加/追加您不想匹配的非法/字符(参见上面的文档),您可以确定每个匹配,它的位置和确定是否更换文本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM