atomの正規表現検索で、
https://yuis.xsrv.jp/images/ss/ShareX_ScreenShot_36692572-d14b-431d-bc9f-f746cc443d65.png
のようなリンクは含むが
![google トレンド](https://yuis.xsrv.jp/images/ss/ShareX_ScreenShot_36692572-d14b-431d-bc9f-f746cc443d65.png)
のようなMarkdownは含まない
ような正規表現検索をしたいのですが、どうしたら良いでしょうか。
試した正規表現パターン
(?!()(https:.*yuis.xsrv.jp.*(.png|.jpg))
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
否定先読み
URL構文の厳密性については一考の余地がありますが、とりあえずは否定先読みだけでも要件を満たせそうです。
JavaScript
1var string = ['https://yuis.xsrv.jp/images/ss/ShareX_ScreenShot_36692572-d14b-431d-bc9f-f746cc443d65.png', '![google トレンド](https://yuis.xsrv.jp/images/ss/ShareX_ScreenShot_36692572-d14b-431d-bc9f-f746cc443d65.png)'].join(); 2 3console.log(string.match(/https://yuis.xsrv.jp/(?:[\w.-]+/)*[\w.-]*(?![\w./()-])/g)); // ["https://yuis.xsrv.jp/images/ss/ShareX_ScreenShot_36692572-d14b-431d-bc9f-f746cc443d65.png"]
RegExp lookbehind (Google Chrome 62 先行実装)
Google Chrome 62 ではいわゆる、戻り読み/後読みの呼称で呼ばれる正規表現パターンが実装されているようです。
この機能は ECMAScript の仕様として提案されていますが、まだ未策定の段階にある為、先行実装の扱いとなります。
- 4545 - Implement RegExp lookbehind - v8 - Monorail
- tc39/proposal-regexp-lookbehind: RegExp lookbehind assertions
JavaScript
1console.log(/(?<=<)test/.test('<test>')); // true 2console.log(/(?<=<)test/.test('(test)')); // false 3 4console.log(/(?<!<)test/.test('<test>')); // false 5console.log(/(?<!<)test/.test('(test)')); // true
Re: igar さん
投稿2018/01/15 15:55
編集2018/01/15 17:00総合スコア18164
0
トライしておられる正規表現は「否定先読み」ですが、意図した意味になりません。これは
(?!()(http...)
と書くと
text
1...https:... <=比較対象文字列 2 ^
条件1: ^の位置が(
でなく、かつ
条件2: ^の位置から(http...)
のパターンに一致
という意味になります。(http...)
というパターンの直前の文字の条件を記述したい場合は「否定後読み」つまり一般的に(?<!()
というパターンを使うとよいのですが、残念ながらATOMではこの「否定後読み」がサポートされていないようです。(もしくは別の記法なんでしょうか・・・)
スッキリした解決法が思いつかないのですが、例えば
検索パターン
(^|[^(])(https:.*yuis.xsrv.jp.*(.png|.jpg))
置換パターン
$1$2
のように最初にマッチした(^|[^(])
の文字を置換パターンで$1
と指定することで「後読み」の効果を代替する方法ぐらいしか思いつきませんでした
単に順次検索して一致した部分文字列をコピーしたい場合どうしても「httpの左側の文字までマッチ結果に含まれてしまう」ためイマイチではありますが・・・
投稿2018/01/15 02:57
編集2018/01/15 03:03総合スコア18394
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/15 13:22
2018/01/15 14:25
2018/01/15 15:09
2018/01/15 16:01
2018/01/15 17:06 編集
2018/01/15 17:03
2018/01/16 00:30
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。