1

我有一个 ruby​​ 正则表达式搜索 url,我试图用某种类型的 url 替换它们。

所以这个正则表达式检测到任何 url,但不包括我替换的类型。

但是,当我尝试此代码时:

 s.sub(/(?!\S*\/el\/\d*)(?=(?i)\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<‌​&gt;]+|(([^\s()<>]+|(([^\s()<>]+)))*))+(?:(([^\s()<>]+|(([^\s()<>]+)))*))))/, 'http://localhost:8080/el/133710')

如果 s 是s = "blablabla www.google.com bla http://localhost blabla"

它应该替换www.google.com为我的字符串http://localhost:8080/el/133710

但我得到了这个:

 "blablabla http://localhost:8080/el/133710www.google.com bla http://localhost blabla"
4

1 回答 1

3

那是因为您的预期捕获www.google.com在前瞻中匹配(?=),所以它实际上并没有被捕获。www.google.com仅用作前瞻上下文。捕获的只是匹配位置的空字符串。sub正在用 . 替换捕获的字符串(这是一个空字符串)http://localhost:8080/el/133710

于 2013-09-05T10:16:13.253 回答