2021/1/25
non-greedy matchが正しく使いましょう。var obj = new RegExp(`<iframe.*?\\ssrc=["']${url}["'].*?>.*?<\/iframe>`)とすると良いです。
JavaScript正規表現で「それ以外」という表現を使いたいです。
正規表現で文字列1文字列2が残るコードを実装しました。
var str = '文字列1<iframe width="560" src="http://example/abc" frameborder="0"></iframe>文字列2';
// srcがこのurlであるiframeだけを削除する
var url = "http://example/abc";
var obj = new RegExp(`<iframe.*?\\ssrc=["']` + url + `["'](.*)?>.*<\/iframe>`)
var result = str.replace( obj, '' );
console.log(result); // -> '文字列1文字列2'
しかし上記、すべてのiframeが削除されてしまいますが、最初だけでいいのです。
例えばstrを次に変えて、文字列1文字列2<iframe width="560" src="http://example/abc" frameborder="0"></iframe>文字列3を残したいです。
var str = '文字列1<iframe width="560" src="http://example/abc" frameborder="0"></iframe>文字列2<iframe width="560" src="http://example/abc" frameborder="0"></iframe>文字列3';
おそらくですが、.*によって、最後の</iframe>まですべてを一致としてしまうのではないかと思っています。
なのでこの部分を下記のように変えてみました。
var obj = new RegExp(`<iframe.*?\\ssrc=["']` + url + `["'].*>.*<\/iframe>`);
// ↓下記のように変えてみました
var obj = new RegExp(`<iframe.*?\\ssrc=["']` + url + `["'].*>^(?!.*<\/iframe>)<\/iframe>`);
^(?!.*<\/iframe>)で</iframe>という文字を含まないを表現したつもりです。
参考:https://uxmilk.jp/50674
しかし何も削除されなくなってしまいました。。
どうすれば求めている結果になるでしょうか?