1

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が lookahead 内で一致するため(?=)、実際にはキャプチャされないためです。www.google.com先読みコンテキストとしてのみ機能します。キャプチャされるのは、一致する位置の空の文字列のみです。subキャプチャされた文字列 (空の文字列) を に置き換えていますhttp://localhost:8080/el/133710

于 2013-09-05T10:16:13.253 に答える