如果以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的网址。

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

格式:

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

另一个选项(我做了零性能测试)将使用正则表达式和回调作为第二个参数的string.replace()

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

然后,在替换函数中,使用传递给回调函数的offset参数(参见上面的文档),将不希望匹配的非法/字符前缀/追加到匹配的字符串中,您可以确定每个匹配项,并且它是位置和作出是否替换文本的决定。

链接地址: http://www.djcxy.com/p/12979.html

上一篇: Don't match a group if it starts with a string in javascript

下一篇: .Net Regex