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

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

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

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

Q&A

2回答

1233閲覧

WEBサイトならリンク、画像ファイルなら画像タグで出力したい

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

1クリップ

投稿2020/03/08 03:41

前提・実現したいこと

WEBサイトならリンク、画像ファイルなら画像タグで出力したい
JavaScriptのマッチで画像URLは画像タグ、WEBサイトはリンクタグにそれぞれ置換する事は可能でしょうか?
ソースコードの2行を混ぜたような書き方はできるのでしょうか?

該当のソースコード

JavaScript

1url="https://~.jpg?6a4b3c2d4e5 画像とリンク https://yahoo.co.jp/"; 2url = url.replace(/(http(s)?://[a-zA-Z0-9-.!'()*;/?:_~@&=+$,%#]+).jpg/gi, '<img src="$1">'); 3url = url.replace(/(http(s)?://[a-zA-Z0-9-.!'()*;/?:_~@&=+$,%#]+)/gi, '<a href="$1">リンク</a>');

補足情報(FW/ツールのバージョンなど)

urlのhttps://~.jpg?6a4b3c2d4e5の乱字の部分はキャッシュ対策として付加されているもので毎回変わります

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

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

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

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

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

guest

回答2

0

ソースコードの2行を混ぜたような書き方

現在のブラウザはどれも、 HTMLAnchorElement を介するだけでURL解析できますので、 pathname の拡張子で切り分ける方法を使えば、複雑な正規表現を書く必要はなくなっています。

MDN の HTMLAnchorElement の説明にも HTMLHyperlinkElementUtils を継承している旨の説明がありますので、例えば以下のような解析例で ?cacheBustingNumber(乱数) 部分を無視した切り分けもできます。

javascript

1var checkURL = ( url ) => { 2 3 // HTMLHyperlinkElementUtils を介したURL解析例 4 let a = Object.assign( document.createElement("A"), { 5 href: url 6 }); 7 8 // 解析の確認 9 let { href, pathname, search, hash } = a; 10 console.log(`href: ${href}`); 11 console.log(`path:"${pathname}", search:"${search}", hash:"${hash}"`); 12 if( pathname.match(/.(jpg|png|gif|svg)$/i) ) { 13 console.log("img タグが良いっぽい") 14 } 15 else { 16 console.log("a タグが良いっぽい") 17 } 18 19} 20checkURL( "https://example.com/path/to/page.html?12345"); 21checkURL( "https://example.com/path/to/page.jpg?12345");

古いブラウザ用に、正規表現で解析するコードを書いたことはあります。CODE PEN parseURL

投稿2020/03/08 07:02

編集2020/03/08 07:31
AkitoshiManabe

総合スコア5434

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

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

0

色々方法は考えられますが、確実なのはAjaxでPHPにデータを渡してリンク先のファイルの判別をすることではないでしょうか?

書いてみたけど実際には使わないでください。

あくまでも、こんな感じの処理かな。というふうに書いてます。

HTML

1 2<!DOCTYPE html> 3<meta charset=UTF-8> 4<input type=text id=url name=url> 5<button id=ajax>検証</button> 6<div id=result></div> 7<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> 8<script> 9$(function(){ 10 $('#ajax').on('click',function(){ 11 $.ajax({ 12 url:'', //PHPのファイル名を入れてください 13 type:'POST', 14 data:{ 15 'url':$('#url').val(), 16 } 17 }).done( (data) => { 18 $('#result').html(data); 19 console.log(data); 20 }).fail( (data) => { 21 alert('ERROR!'); 22 }); 23 }); 24}); 25</script> 26

PHP

1 2<?php 3if($_POST['url']){ 4 $response = get_headers($_POST['url'], 1); 5 if(strpos($response["Content-Type"],'image') !== false){ 6 echo '<img src=',$_POST['url'],'>'; 7 }else{ 8 echo '<a href=',$_POST['url'],'>サイト</a>';; 9 } 10} 11

投稿2020/03/08 05:35

編集2020/03/08 06:05
kyoya0819

総合スコア10429

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

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

退会済みユーザー

退会済みユーザー

2020/03/08 06:19 編集

回答ありがとうございます ちょっとズレが生じているようです やりたい事は単純にurlに二つのリンクがあった場合に、jpgであれば画像として出力、無ければリンクとして出力といったののですが、難しいものでしょうか?
退会済みユーザー

退会済みユーザー

2020/03/08 06:20

正確性は求めておりません JavaScriptで完結させたいと考えております
kyoya0819

2020/03/08 06:20

二つのリンクというのはinput text等に複数のリンクが来るということでしょうか?
退会済みユーザー

退会済みユーザー

2020/03/08 06:23

urlという変数に複数のhttps~が代入されていた場合です 該当のソースコードで望む出力結果は、 <img src="https://~.jpg?6a4b3c2d4e5"> 画像とリンク <a href="https://yahoo.co.jp/">リンク</a> となります
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問