我正在使用一些没有典型lookbehind选项的javascript中的某些正则表达式进行挣扎,如果它没有前面的字符串,则只匹配一个组:
(^|)(www\.[\S]+?(?= |[,;:!?]|\.( )|$))
所以在下面的
hello http:/www.mytestwebsite.com is awesome
我试图检测www.mytestwebsite.com是否先于
/
如果它是我不想匹配,否则匹配。我尝试使用前瞻,但它看起来与我已经拥有的前瞻性相矛盾。
我一直在玩(?!&#x2f)在不同的地方,但没有成功。
(^|)((?!/)www\.[\S]+?(?= |[,;:!?]|\.( )|$))
如果匹配在
之前,则前瞻不匹配答案 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参数(参见上面的文档)预先添加/追加你不想匹配的非法/字符,你可以确定每个匹配,以及它的位置,并决定是否更换文本。