[英]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)在不同的地方,没有成功。
(^|)((?!/)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.