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

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

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

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

Q&A

解決済

1回答

695閲覧

正規表現を使い同じURLがあったら一つに置換する

ppo

総合スコア1

JavaScript

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

0グッド

0クリップ

投稿2021/06/09 02:04

編集2021/06/09 02:13

前提・実現したいこと

JavaScriptの正規表現を使い、もし同じURLが変数の中に1個以上出てきた場合、1個目以降を消し去れることは可能でしょうか?

var str="https://teratail.com/ aaaaa https://teratail.com/ bbbb https://yahoo.com/";

だとしたらhttps://teratail.com/ aaaaa bbbb https://yahoo.com/と出力したいです

かなり長い処理でしたら、分割とマッチとループで実現できるものの、
正規表現で、一発でできないかと考えた次第です。

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

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

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

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

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

maisumakun

2021/06/09 02:17

「正規表現で」行いたい、のにはどのような背景がありますでしょうか? (空白でsplitして、配列を操作していく、というような、正規表現と別系統の手法も考えられます)
ppo

2021/06/09 02:18

補足しました >かなり長い処理でしたら、分割とマッチとループで実現できるものの、 正規表現で、一発でできないかと考えた次第です。
guest

回答1

0

ベストアンサー

正規表現では難しいと思いますが、下記のように、一旦配列に格納してから、重複するものを削除することで実現出来るように思います。(今回出力されたいものはnewStrに格納しています)
(URLは、半角スペース1個で区切られている前提です)

let str="https://teratail.com/ aaaaa https://teratail.com/ bbbb https://yahoo.com/"; let urls = str.split(" "); urls = Array.from(new Set(urls)); let newStr = urls.join(" ")

(追記)質問文の追加部分を拝見しました。正規表現で「一発で」というのは困難に思えますが、上記の方法は十分「一発」に近いように思います。
正規表現で実装することが「目的」なのでしたら的外れと思いますので無視していただいて構いません。

投稿2021/06/09 02:12

編集2021/06/09 02:18
hallen0225

総合スコア587

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

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

ppo

2021/06/09 02:18

現時点では4行で実現できるベストアンサーです これより楽な手法を考えられる方はぜひ教えて下さい
ppo

2021/06/09 02:20

>(追記)質問文の追加部分を拝見しました。正規表現で「一発で」というのは困難に思えますが、上記の方法は十分「一発」に近いように思います。 正規表現で実装することが「目的」なのでしたら的外れと思いますので無視していただいて構いません。 もう充分です。 念のために、正規表現一発でできるという方がいらっしゃれば、回答お願いいたします
ppo

2021/06/09 02:23

いや、もうよく考えたら一発ですよね。 すみません、余計なことを申して。 ありがとうございます
ppo

2021/06/09 02:26

ちなみにこちらのソースではスペース区切りでない場合、 httpまたはhttpsからはじまり日本語、または半角スペース、または全角スペースで識別を終えるとなると、 かなり面倒になるでしょうか
hallen0225

2021/06/09 03:24 編集

それでしたら、matchAllメソッドというものがあります。(参考:https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/matchAll) そちらの条件(httpまたはhttpsで始まり、日本語・半角スペース・全角スペースの直前まで)にマッチするような正規表現を書くことさえできれば、それにマッチする要素を配列で取得できます。 そこから重複を削る部分は先ほどの回答と同じになります。 (追記)もっとも、スペース区切りなりカンマ区切りなり、適切に区切られたデータを用意できるならそれがベストではあります。。 こればかりは、実際にどのようなデータを処理したいのか分からないと具体的なことは言えませんが。 ユーザに画面から入力させるにしても入力方法は工夫できそうです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問