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 しかし何も削除されなくなってしまいました。。 どうすれば求めている結果になるでしょうか?