-1

私はこのウェブサイトから正規表現を「借りました」:http : //daringfireball.net/2010/07/improved_regex_for_matching_urlsほぼ完成していますが、exemple.comと一致させたい
スタックオーバーフローがdoyourhomework.comではないことは知っていますが、長い間合格しました結果なしで考える。テストするフィドルは次のとおりです。http://jsfiddle.net/BGnMm/25/最後に、exemple.comがリンクではないことがわかります。

var reg=/\b((?:[a-z][\w-]+:(?:\/*)|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/gi;
var allurl="http:foo.com/blah_blah http://foo.com/blah_blah/ (Something like http://foo.com/blah_blah) http://foo.com/blah_blah_(wikipedia) http://foo.com/more_(than)_one_(parens) (Something like http://foo.com/blah_blah_(wikipedia)) http://foo.com/blah_(wikipedia)#cite-1 http://foo.com/blah_(wikipedia)_blah#cite-1 http://foo.com/unicode_(✪)_in_parens http://foo.com/(something)?after=parens http://foo.com/blah_blah. http://foo.com/blah_blah/. <http://foo.com/blah_blah> <http://foo.com/blah_blah/> http://foo.com/blah_blah, http://www.extinguishedscholar.com/wpglob/?p=364. http://✪df.ws/1234 rdar://1234 rdar:/1234 x-yojimbo-item://6303E4C1-6A6E-45A6-AB9D-3A908F59AE0E message://%3c330e7f840905021726r6a4ba78dkf1fd71420c1bf6ff@mail.gmail.com%3e http://➡.ws/䨹 www.c.ws/䨹 <tag>http://example.com</tag> Just a www.example.com link. http://example.com/something?with,commas,in,url, but not at end What about <mailto:gruber@daringfireball.net?subject=TEST> (including brokets). mailto:name@example.com bit.ly/foo “is.gd/foo/” WWW.EXAMPLE.COM http://www.asianewsphoto.com/(S(neugxif4twuizg551ywh3f55))/Web_ENG/View_DetailPhoto.aspx?PicId=752 http://www.asianewsphoto.com/(S(neugxif4twuizg551ywh3f55)) http://lcweb2.loc.gov/cgi-bin/query/h?pp/horyd:@field(NUMBER+@band(thc+5a46634)) 6:00p filename.txt http://example.com/quotes-are-“part” ✪df.ws/1234 example.com example.com/";
document.write(allurl.replace(reg,"<a href='$1' >$1</a><br />"));
4

2 に答える 2

2

の後に交互演算子(|)を追加します。{2,4}\/

    var reg=/\b((?:[a-z][\w-]+:(?:\/*)|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/|)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/gi;

これについて理解しておくべきことがあります。キャプチャされていない最初のグループ、(?: … )は、URLの「インジケータ」を探します。たとえば、1つのインジケータはwww(最大3桁の数字が続く)です。ただし、インジケーターをまったく使用せずにURLを識別する方法を求めています。したがって、上記で行ったことは、「有効な」インジケーターとして 「または空の一致」という句を追加したことです。この結果、正規表現の選択性が低下します。あらゆる種類の文字列だけでなく、、、example.comfilename.txtURL3.141593としてomg...really識別されます。 他の(すぐに利用できる)オプションは、接尾辞をより選択することです。たとえば、特定の接尾辞が必要です(com|org|net)が、これにより、接尾辞がまったく指定されていない元の正規表現の一般性が失われます。

言い換えれば、おそらく、正規表現の作成スキルや正規表現言語自体の制限ではなく、ロジックの制限に直面していることになります。

于 2012-05-08T20:15:57.827 に答える
0

確認してください

var reg=/\b((?:[a-z][\w-]+:(?:\/*)|(?:www\d{0,3}[.])|[a-z0-9.\-]+[.][a-z]{2,4}\/{0,1})(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))*(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/gi;

あなたのニーズに合います。www(anyNumber)は、1回または0回表示されるように設定されています。最初の答えで申し訳ありませんが、テキストに気づきませんでした。

于 2012-05-08T19:58:13.967 に答える