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

时间:2015-12-04 23:08:03

标签: javascript regex

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

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

所以在下面的

hello http:/www.mytestwebsite.com is awesome

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

/

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

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

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

如果匹配在

之前,则前瞻不匹配

2 个答案:

答案 0 :(得分:3)

由于JS中缺少 lookbehinds ,这是实现目标的唯一方法 是为了匹配那些包含错误/的网站。

这是因为前瞻不会推进当前位置 耗材文本上只有匹配才能提升排名。

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

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

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

格式化:

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

答案 1 :(得分:0)

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

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

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