如果以javascript中的字符串开头,则不匹配组
我正在努力处理一些正则表达式,在没有典型的lookbehind选项的javascript中,如果它没有以字符串开头,那么只匹配一个组:
(^|)(www.[S]+?(?= |[,;:!?]|.( )|$))
所以在下面
hello http:/www.mytestwebsite.com is awesome
我试图检测www.mytestwebsite.com是否在前
/
如果是我不想匹配的话,否则就赶走。 我试图用前瞻的眼光看,但它看起来与我已有的展望相冲突。
我一直在玩弄(?!&#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