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

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

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

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

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

3回答

1053閲覧

特定の条件の文字列を除いた置換。

tkshp

総合スコア174

JavaScript

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

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2018/10/19 10:37

編集2018/10/19 16:43

前提・実現したいこと

JavaScript

1var link = "<div data-url='http://www.sample.jp/'><title>サンプル</title></div>"; 2 3var content =" 4<div data-url='http://www.sample.jp/'><title>サンプル</title></div>5http://www.sample.jp/6http://www.sample.jp/";

このcontentについて、data-url='http://www.sample.jp/'以外の
http://www.sample.jp/を変数linkに置換する方法ってありますか?

結果として、

<div data-url='http://www.sample.jp/'><title>サンプル</title></div>、 <div data-url='http://www.sample.jp/'><title>サンプル</title></div>、 <div data-url='http://www.sample.jp/'><title>サンプル</title></div>

となるように置換したいです。
ご教示お願い致します。

試したこと

replaceメソッドと正規表現を使えば、もしかしたらできるかもしれないけど、
書き方がわかりません。

content.replace("ここをどう書けばよいですか?", link);

方針としては、下記のようなことをやればできそうな気がしますが、できません。
(?!~)の指定の方法が間違っているのでしょうか?

content.replace("(?!<div data-url=')http://www.sample.jp/(?!'>)", link);

追記。

contentはそのとき次第でいろいろ変わります。
区切り文字も毎回「、」とは限らず、任意の数の任意の文字になります。

var content =" <div data-url='http://www.sample.jp/'><title>サンプル</title></div>、 http://www.sample.jp/"; だったり、 <div data-url='http://www.sample.jp/'><title>サンプル</title></div>、 http://www.sample.jp/、 http://www.sample.jp/"; だったり、 <div data-url='http://www.sample.jp/'><title>サンプル</title></div>、 http://www.sample.jp/、 http://www.sample.jp/, http://www.sample.jp/"; だったり、 <div data-url='http://www.sample.jp/'><title>サンプル</title></div>、 http://www.sample.jp/、 http://www.sample2.jp/,サンプル文章 http://www.sample.jp/"; だったりします。 これの期待値は、 <div data-url='http://www.sample.jp/'><title>サンプル</title></div>、 <div data-url='http://www.sample.jp/'><title>サンプル</title></div>、 http://www.sample2.jp/,サンプル文章 <div data-url='http://www.sample.jp/'><title>サンプル</title></div>"; です。 URLが付与されたら、linkはそのURLを整形したものを入れています。 http://www.sample.jp/のようなURLが付与されたら、そのURLで var link = "<div data-url='URL'><title>サンプル</title></div>"; を整形。 contentには、URLを整形したものと、そのままのURLが混ざっているので、 <div data-url='URL'><title>サンプル</title></div> <div data-url='URL'><title>サンプル</title></div> URL そのままのURLをlinkの文字に置換したいです。 つまり、整形された<div data-url='URL'><title>サンプル</title></div>を除いて、 URLを置換したいです。

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

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

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

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

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

mather

2018/10/19 10:55

contentの中身が違う、という例のうち最後のケースではどうなるのが期待値なのですか?
退会済みユーザー

退会済みユーザー

2018/10/19 10:58

「試したこと」に試したことが書かれていませんし、今のままではただの丸投げですね。
tkshp

2018/10/19 11:41

>mather様 ご指摘ありがとうございます。追記しました。宜しくお願い致します。
tkshp

2018/10/19 16:44 編集

>yukke_様 試したことを追記しました。宜しくお願い致します。
guest

回答3

0

属性値内の <> がエスケープされることが保証されているのなら、

JavaScript

1string.replace(/(>)([^<]+)/g, (m, p1, p2) => p1 + p2.replace(reg, link));

逆にルーズな書き方がされているのなら、DOMParser() でDOM化するのが現実的でしょう。

Re: tkshp さん

投稿2018/10/19 11:25

think49

総合スコア18162

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

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

tkshp

2018/10/19 16:22

ご回答ありがとうございます。 すみません、理解できていない所がありまして、 (>)([^<]+)はどういったものにマッチしますか? >サンプル とかですか? m, p1, p2はそれぞれ何を示していますか? p2.replace(reg, link)のregって何ですか?
guest

0

自己解決

url = url.replace(///g, "/");
var reObj = new RegExp("(?!<div data-url=')" + url + "(?!'>)", "g");
content = content.replace(reObj, link);

投稿2018/10/21 02:40

tkshp

総合スコア174

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

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

0

質問文をちゃんと読めていませんでした(^^;
訂正したものを記載しておきます。

質問に対してちょっと斜めの回答になりますが…

javascript

1link.repeat(content.match(/http://www.sample.jp//g).length)

投稿2018/10/19 10:44

編集2018/10/19 11:48
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問