質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

2回答

478閲覧

Javascriptでhttp://で始まる文字を自動リンクさせようと思うのですが、( が含まれていると正常リンクできないので良い感じに自動リンクできるようにしたい。

owen112

総合スコア7

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2018/01/11 06:43

編集2018/01/11 06:44

Javascriptでhttp://で始まる文字を自動リンクさせようと思うのですが、( が含まれていると正常リンクできないので良い感じに自動リンクできるようにしたいです。

参考させていただいたものをコピペしたんですが、恥ずかしながらJavascriptが分からず…
出来る限りJqeuryとかライブラリを使わず素のJavascriptを使いたい。

javascript

1var text = "ヤフーニュースです。(https://news.yahoo.co.jp/)"; 2text = text.replace( 3 /((http|https|ftp|ftps)\://[a-zA-Z0-9\-.]+.[a-zA-Z]{2,3}(/\S*)?)/g, 4 '<a href="$1">$1</a>' 5); 6console.log(text)

出力結果

ヤフーニュースです。(<a href="https://news.yahoo.co.jp/)">https://news.yahoo.co.jp/)</a>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

タグはありませんが、どちらかというと正規表現の問題ですね。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions
\Sが)を含んでしまっているので、適当に置き換えます。

JavaScript

1var text = "ヤフーニュースです。(https://news.yahoo.co.jp/)"; 2text = text.replace( 3 /((http|https|ftp|ftps)\://[a-zA-Z0-9\-.]+.[a-zA-Z]{2,3}(/[%!#$&'(*+,/:;=?@[]0-9A-Za-z._~-]*)?)/g, 4 '<a href="$1">$1</a>' 5); 6console.log(text)

問題は、次のような本当に)を含むときに切られてしまうだろうということ。
https://msdn.microsoft.com/ja-jp/library/system.string(v=vs.90).aspx

さて、厳密にはURIはRFC3986で定義されているのでよく読めば何を使えばいいかわかります(この回答では読んでいません!)。
→ 実際にはこれを置き換えようとしているURL Living Standardのほうを参照したほうがいいかもしれません。
https://triple-underscore.github.io/URL-ja.html

投稿2018/01/11 07:19

x_x

総合スコア13749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ご所望どおりの動作となっているか分かりませんが・・・

javascript

1text = text.replace( 2 /((http|https|ftp|ftps)\://[a-zA-Z0-9\-.]+.[a-zA-Z]{2,3}/\S*?)/g, 3 '<a href="$1">$1</a>' 4); 5

(/\S*)?)の()を取っ払っただけです。

3パターン試しました。

1.ご提示のもの。

ヤフーニュースです。(https://news.yahoo.co.jp/)

ヤフーニュースです。(<a href="https://news.yahoo.co.jp/">https://news.yahoo.co.jp/</a>)

2.全角かっこ
ヤフーニュースです。(https://news.yahoo.co.jp/)

ヤフーニュースです。(<a href="https://news.yahoo.co.jp/">https://news.yahoo.co.jp/</a>

3.かっこなし
ヤフーニュースです。https://news.yahoo.co.jp/

ヤフーニュースです。<a href="https://news.yahoo.co.jp/">https://news.yahoo.co.jp/</a>

追記[16:32]

別サイトを参考に修正してみました。

http://で始まる文字を」とのことなのでftp,ftpsを除外しています。
(含めたい場合は冒頭部分をちょっと修正する必要がありますね

javascript

1 2function urlLink(text){ 3 text = text.replace( 4 /((h?)(ttps?://[a-zA-Z0-9.\-_@:/~?%&;=+#',*!]+))/g, 5 '<a href="$1">$1</a>' 6 ); 7 8 console.log(text); 9} 10 11 12urlLink("ヤフーニュースです。(https://news.yahoo.co.jp/)"); //ご提示のもの 13//ヤフーニュースです。(<a href="https://news.yahoo.co.jp/">https://news.yahoo.co.jp/</a>) 14 15urlLink("ヤフーニュースです。(https://news.yahoo.co.jp/)"); //全角かっこ 16//ヤフーニュースです。(<a href="https://news.yahoo.co.jp/">https://news.yahoo.co.jp/</a>) 17 18urlLink("ヤフーニュースです。https://news.yahoo.co.jp/"); //かっこなし 19//ヤフーニュースです。<a href="https://news.yahoo.co.jp/">https://news.yahoo.co.jp/</a> 20 21urlLink("ヤフーニュースhttps://news.yahoo.co.jp/です。"); //テキストの途中に含む場合 22//ヤフーニュース<a href="https://news.yahoo.co.jp/">https://news.yahoo.co.jp/</a>です。 23 24urlLink("https://news.yahoo.co.jp/ヤフーニュースhttps://news.yahoo.co.jp/です。"); //複数含む場合 25//<a href="https://news.yahoo.co.jp/">https://news.yahoo.co.jp/</a>ヤフーニュース<a href="https://news.yahoo.co.jp/">https://news.yahoo.co.jp/</a>です。 26 27urlLink("ヤフーニュースhttps://news.yahoo.co.jpです。"); // スラッシュで終わらない 28//ヤフーニュース<a href="https://news.yahoo.co.jp">https://news.yahoo.co.jp</a>です。 29 30urlLink("ヤフーニュースhttps://news.yahoo.co.jp/aです。"); // スラッシュで終わらない(階層あり) 31//ヤフーニュース<a href="https://news.yahoo.co.jp/a">https://news.yahoo.co.jp/a</a>です。 32 33urlLink("ヤフーニュースhttps://news.yahoo.co.jp/a/です。"); // 階層ありでスラッシュで終わる 34//ヤフーニュース<a href="https://news.yahoo.co.jp/a/">https://news.yahoo.co.jp/a/</a>です。 35 36urlLink("ヤフーニュースhttps://news.yahoo.co.jp/a/ab/abc/abcdです。"); // 階層いっぱい 37//ヤフーニュース<a href="https://news.yahoo.co.jp/a/ab/abc/abcd">https://news.yahoo.co.jp/a/ab/abc/abcd</a>です。 38 39urlLink("ヤフーニュースhttps://news.yahoo.co.jp/a/ab/?key=valueです。"); // クエリ 40//ヤフーニュース<a href="https://news.yahoo.co.jp/a/ab/?key=value">https://news.yahoo.co.jp/a/ab/?key=value</a>です。 41 42urlLink("ヤフーニュースhttps://news.yahoo.co.jp/a/ab/?key=value&key2=value2です。"); // クエリ複数 43//ヤフーニュース<a href="https://news.yahoo.co.jp/a/ab/?key=value&key2=value2">https://news.yahoo.co.jp/a/ab/?key=value&key2=value2</a>です。 44

投稿2018/01/11 07:03

編集2018/01/11 07:33
m.ts10806

総合スコア80848

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/01/11 07:07

あ。これだと完璧ではないですね。 https://news.yahoo.co.jp/a というURLだった場合に最後の「a」が無視されてしまいます。 /a/b/ などドキュメントルート以降の区切りに対応できてません。 ちょっと考え直してみます。
m.ts10806

2018/01/11 07:34

正規表現のアプローチの仕方がかわっていますが一通り思いつくパターンは試したものです。参考にしてください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問