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

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

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

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

Q&A

2回答

1338閲覧

正規表現 URL抽出と逆のことをやりたい

yukinmitu

総合スコア7

JavaScript

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

0グッド

3クリップ

投稿2021/10/24 09:20

編集2021/10/24 09:35

下記コードは出力がhttps://teratail.com/ https://google.com/になりますがこれの逆で
URLを除外してあいうえおabc 不特定文字def_123!@.のみ出力したいです
どうやったらいいんでしょうか?

<script> window.onload=function(){ str="あいうえおabc https://teratail.com/不特定文字def_123!@.https://google.com/"; if(str.match(/(https?|ftp)(://[-_.!~*\'()a-zA-Z0-9;/?:\@&=+$,%#]+)/gi)){ ss=str.match(/(https?|ftp)(://[-_.!~*\'()a-zA-Z0-9;/?:\@&=+$,%#]+)/gi); for(i=0;i<ss.length;i++){ alert(ss[i]); } } } </script>

下記の考え方は無しでお願いします
正規表現でURLだけ除外したものを一発で取る方法はないでしょうか?

<script> window.onload=function(){ str="あいうえおabc https://teratail.com/不特定文字def_123!@.https://google.com/"; if(str.match(/(https?|ftp)(://[-_.!~*\'()a-zA-Z0-9;/?:\@&=+$,%#]+)/gi)){ ss=str.match(/(https?|ftp)(://[-_.!~*\'()a-zA-Z0-9;/?:\@&=+$,%#]+)/gi); for(i=0;i<ss.length;i++){ a=str.replaceAll(ss[i],''); str=a; } } alert(a); } </script>

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

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

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

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

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

guest

回答2

0

以下でどうでしょ?

(1) まず URL の正規表現を少し修正する。

  1. 二つの丸カッコのうち

・1つめのほうを非キャプチャグループにする。(各丸カッコの開く方の後に ?: を追加する。)
・2つめのほうは丸カッコ自体を消す。
2. gオプションを消す。

diff

1- /(https?|ftp)(://[-_.!~*\'()a-zA-Z0-9;/?:\@&=+$,%#]+)/gi 2+ /(?:https?|ftp)://[-_.!~*\'()a-zA-Z0-9;/?:\@&=+$,%#]+/i

(2) 上記のパターンをデリミタと考えて、対象文字列をsplitする。

javascript

1const urlPattern = /(?:https?|ftp)://[-_.!~*\'()a-zA-Z0-9;/?:\@&=+$,%#]+/i; 2 3const str = "あいうえおabc https://teratail.com/不特定文字def_123!@.https://google.com/"; 4 5const result = str.split(urlPattern); 6 7console.log(result);

こうすると、resultとして以下が得られる。

console

1["あいうえおabc ","不特定文字def_123!@.",""]

(3) 上記のように、str の末尾(や先頭)がURLのパターンに含まれていると、result の中に空文字列が入ってくるので、これを除去するには、splitしたあと、filter する。

javascript

1const result = str.split(urlPattern).filter(s => s);

???? tera: 365984@codepen

投稿2021/10/24 11:51

編集2021/10/24 11:58
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ertya

2021/10/24 13:42

こんにちは。横から失礼します 私も試行錯誤してましたができませんでしたので参考にさせていただきます そこで一つお聞きしたいのですが const urlPattern = /(?:https?|ftp)://[-_.!~*\'()a-zA-Z0-9;/?:\@&=+$,%#]+/i; const str = "あいうえおabc https://teratail.com/不特定文字def_123!@.https://google.com/"; const result = str.split(urlPattern).filter(s => s); console.log(result); によってURLを除去したのち、再度同じ位置にURLを復元させることってできませんでしょうか? ["あいうえおabc ","不特定文字def_123!@."] となったものを元の位置に戻すと ["あいうえおabc ","https://teratail.com/",不特定文字def_123!@.","https://google.com/"] に戻すことってできるんでしょうか?
退会済みユーザー

退会済みユーザー

2021/10/25 02:50

@ertyaさん コメントありがとうございます。 > 再度同じ位置にURLを復元させることってできませんでしょうか? についてですが、 > 復元させる ことは難しいですが、はじめから > ["あいうえおabc ","https://teratail.com/",不特定文字def_123!@.","https://google.com/"] を取得することは可能です。それには > const urlPattern = /(?:https?|ftp)://[-_.!~*\'()a-zA-Z0-9;/?:\@&=+$,%#]+/i; の正規表現(/ と / とで挟まれている部分)全体をキャプチャするように、開始の / の直後に ( を、終端の / の直前に ) を追加して、 const urlPattern = /((?:https?|ftp)://[-_.!~*\'()a-zA-Z0-9;/?:\@&=+$,%#]+)/i; とします。この (・・・) を追加したurlPatternで const result = str.split(urlPattern).filter(s => s); とすると、result には以下のように、urlPattern にマッチした部分も含まれます。 ["あいうえおabc ","https://teratail.com/","不特定文字def_123!@.","https://google.com/"] ???? https://codepen.io/kilesa/pen/NWvpKPQ?editors=0012
guest

0

replaceではダメでしょうか??
str.replace(/(https?|ftp)(://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+)/gi, '')

投稿2021/10/24 09:43

a.com

総合スコア907

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

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

yukinmitu

2021/10/24 09:48 編集

できればreplaceは使いたくないのです、、、 matchは一致するものを取得する、その逆(一致しないものを取得する)はmatchではできないんでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問