-2

JavaScript の正規表現を使用してクリック可能なリンクに URL を linkify すると奇妙な問題が発生しました。

so.com をよく調べた後、jmrware/LinkifyURL.jsを使用して URL をクリック可能なリンクに変換し始めました。しかし、スキーマなしで URL を変換しようとすると ((htt|ft)ps)、URL がまったく認識されません。

例:

http://www.google.com (受け入れます)
www.google.com (受け入れません)
google.com (受け入れません)。

誰かがこれの解決策を見つけるのを手伝ってくれますか?

編集: 私のシナリオでは、ユーザーが任意の URL を入力できるテキスト領域でユーザーからの入力を受け入れる必要があります。サイトに表示しているときに、ユーザー入力で見つかった URL をリンクする必要があります。

ここにリンクしようとしている私のテストコンテンツがあります。

> http://example.com:80                                            (linkified)<br/>
> http://example.com:80/path/                                      (linkified)<br/>
> http://example.com:80/path/file.txt                              (linkified)<br/>
> http://example.com:80/path/file.txt?query=val&var2=val2          (linkified)<br/>
> http://example.com:80/path/file.txt?query=val&var2=val2#fragment (linkified)<br/>
> http://example.com/(file's_name.txt)                             (linkified)<br/>
> http://[2001:0db8:85a3:08d3:1319:8a2e:0370:7348]                 (linkified)<br/>
> http://[2001:0db8:85a3:08d3:1319:8a2e:0370:7348]/file.txt        (linkified)<br/>
> http://youtube.com:80/path/file.txt?query=val&var2=val2          (linkified)<br/>
> www.example.me                                                   (not linkified)<br/>
> example.me                                                       (not linkified)<br/>

上記のコードでは、最後の 2 つの文字列がリンクされていません。JavaScript RegExp で否定的な後読みを試みましたが、それでもうまくいきませんでした。

((?!(http|ftp|https|ftps)://)^[a-z0-9-]+(.[a-z0-9-]+)+([/?].*)?) - 否定後読み

私は so.com の初心者で、質問が明確でない場合はご容赦ください。

4

2 に答える 2

1

私は問題のlinkifyプロジェクトの作者です。設計上、このlinkify()関数は、scheme要素を持つURLにのみ一致します。この制限がないと、誤検知が多すぎます。(ほとんどすべての文字列または部分文字列が有効なURIです。)

于 2012-10-28T16:16:48.850 に答える
0

次の行を追加して、url文字列がリンクであることを確認します。

url = url.replace(/^(?!(?:http|https|ftp):\/\/)/i, 'http://');
于 2012-08-27T13:21:22.240 に答える