問題タブ [lookaround]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
944 参照

.net - 可変長後読みでのグループのバランス調整

TL;DR: .NET の後読み内でキャプチャ (特にバランシング グループ) を使用すると、取得したキャプチャが変更されますが、違いはありません。.NET の後読みが予期した動作を妨げる原因は何ですか?

.NET のバランシング グループをいじる言い訳として、この他の質問に対する答えを見つけようとしていました。ただし、可変長の後読み内でそれらを機能させることはできません。

まず、この特定のソリューションを生産的に使用するつもりはないことに注意してください。それは学術的な理由によるものです。なぜなら、私が気付いていない可変長後読みで何かが起こっていると感じているからです。将来、問題を解決するためにこのようなものを実際に使用する必要がある場合に、それが役立つ可能性があることを知っています.

次の入力を検討してください。

目標は、 が前にある括弧内にあるすべての文字に一致することです (つまり、からまで~のすべて)。私の試みは、後読みで正しい位置を確認することでした。これにより、 への 1 回の呼び出しですべての文字を取得できます。これが私のパターンです:aiMatches

後読みで を見つけようとしてから~(、名前付きグループ スタックを使用してDepth不要な開き括弧を数えます。で開いた括弧~(が決して閉じない限り、後読みは一致するはずです。への閉じ括弧に達した場合、(?<-Depth>...)はスタックから何もポップできず、後読みは失敗します (つまり、 からのすべての文字に対してj)。残念ながら、これは機能しません。代わりにabcefgおよびに一致しmます。したがって、これらのみ:

これは、以前に行った最高のネストレベルに戻らない限り、単一の括弧を閉じると、後読みは何にも一致しないことを意味するようです。

これは、私の正規表現に奇妙な点があるか、バランス グループを正しく理解していなかったことを意味している可能性があります。しかし、私は後読みなしでこれを試しました。次のように、すべての文字の文字列を作成しました。

そして、それらのそれぞれでこのパターンを使用しました:

そして、必要に応じて、すべてのケースが一致し、とzの間の文字を置換し、その後のすべてのケースが失敗します。ai

では、(可変長の) 後読みは、このバランシング グループの使用を破るものでしょうか? 私はこれを一晩中調査しようとしましたが (そして、このようなページを見つけまし)、後読みでこれを 1 回も使用する方法を見つけることができませんでした。

また、.NET 正規表現エンジンが .NET 固有の機能を内部でどのように処理するかについての詳細な情報に誰かが私をリンクしてくれたら嬉しいです。この素晴らしい記事を見つけましたが、たとえば、(可変長の) 後読みには入っていないようです。

0 投票する
1 に答える
1422 参照

regex - 他の文字で囲まれた正規表現パディング番号

文字列パターンで囲まれた一連の数字をキャプチャし、その一連の数字に最大 4 桁の先行ゼロを埋め込む RegEx を探しています。同時に、文字列全体からすべてのスペースを削除する必要があります。例: "F12b" は "12" をキャプチャして "F0012b" を返す必要があります "AB 214/3" は "214" をキャプチャして "AB0214/3" を返す必要があります "G0124" は "0124" をキャプチャして元の文字列を変更せずに返す必要があります

ソース文字列は次の規則に従う必要があります: - [a-zA-Z] で開始する必要があります - 上記のパターンの後に任意の数のスペースを入れることができます - 数値シーケンスの後に別の文字列を続けることができます - 数値シーケンスは任意の数にすることができます桁数。4 桁未満の場合のみ、先行ゼロでシーケンスがパディングされます。それ以外の場合は変更されません。- 文字列内の最初の出現のみに関心がある

これを理解するのに十分な頻度でRegExを使用していないため、ここにこの質問を投稿していますが、RegExの完璧なケースであることはわかっています. どんな助けも大歓迎です.表現の説明は、私がそれを理解するのに確かに役立ちます.

0 投票する
3 に答える
1021 参照

regex - 正規表現、ルックアラウンド後にマッチングを続行

正規表現でのルックアラウンドに問題があります。

ここで問題: 編集したい大きなファイルがあります。関数を変更して、最初のパラメーターを保持し、2 番目のパラメーターを削除したいと考えています。

私たちが持っているとしましょう:

また

で変更したい:

func2(paramIWantToKeep)どちらの場合も。

だから私は前向きな先読みを使ってみます

ここで、最初のパラメーターを選択しないようにします (その後、かっこで同じことを行うことができます)。

しかし、それは機能しません。私の正規表現は、正の先読み (.+) を無視した後、先読み(, paramIDontWant\))の前と同じ位置を探しているようです (開き括弧)

したがって、私の質問は、一致するグループの後に正規表現を継続する方法です。ここでは (.+) の後です。

ありがとう。

PS:私の質問の英語および/または悪い構造で申し訳ありません。

編集:Sublime Textを使用しています

0 投票する
2 に答える
885 参照

regex - 1 つの検索語の後で、他の 2 つの検索語のうちの 1 つの前 (どちらか早い方) にデータを収集するための正規表現

次の要件を持つ正規表現を作成する必要があります。

与えられたサンプル テキスト:

find this textエリアに出現する文字列を抽出したい

SEARCH_TERM_#1正規表現は、 uptoの後にデータを収集する必要がありSEARCH_TERM_#2ますSEARCH-TERM_#3。#2 と #3 のうち最初に見つかったものを「右側」の検索境界として選択する必要があります。

私は試してみまし(?>SEARCH_TERM_#2|SEARCH_TERM_#3) (?=(?>SEARCH_TERM_#2|SEARCH_TERM_#3))(?>(?=SEARCH_TERM_#2)|(?=SEARCH_TERM_#3))。そして、それらはすべて、収集されたデータに 2 番目の検索用語を含め、3 番目の前に停止しますが、収集されたデータは、最初に来る #2 または #3 の前に停止したいと考えています。

0 投票する
2 に答える
79490 参照

regex - 正規表現 - 一致したパターンを除外する

以下のパターンを除外する必要があります。

これらのいずれかに一致する正規表現を作成しました。ただし、これら以外はすべて取得したい。私が作成したこの正規表現を逆にする方法がわかりません。

上記のパターンは、リストされているすべての文字列に一致します。今、私はそれを他のすべてのものと一致させたいと思っています。どうすればいいのですか?

検索から、否定的な先読み/振り返りのようなものが必要なようです。でも、よくわかりません。誰かが私を正しい方向に向けることができますか?

0 投票する
2 に答える
124 参照

javascript - Javascript チェック周囲のテキスト

私は BBCode スタイルのエディターを作成中です。既成の努力を使用するのではなく、これを行うには優れた理由があります。ほとんどが正常に動作していますが、1 つの条件についてテストする必要があります。次のマークアップを検討してください

すぐにわかるように、上のパイプ文字はタイプミスではありません。プレースホルダーとして使用しています。

ここで、次のユーザー アクションが、私のバージョンのボールド マークダウン タグ [bold][/bold] を挿入することだと想像してください。私のコードは、ユーザーが既存のテキストの一部を既に選択しているかどうかに関係なく、これを処理できます。たとえば、abc.

ただし、次の状況を見てください。

  1. abc を選択 - 変換により [bold]abc[/bold] が生成されます
  2. abc の c の後のキャレット - 変換により abc[bold][/bold] が生成されます
  3. 最後の [/para] のパイプ、|、文字のキャレット

現在、私のコードは [pa|[bold][/bold]ra] を喜んで義務付けて返します。

明らかに、私がする必要があるのは、ユーザーの選択、または現在のキャレット位置がマークダウン タグの 1 つに完全に収まらないことを確認することです (選択がマークダウン タグと重なっていないことを確認するコードが既にあります。

場所がマークダウンタグ内にあることを検出するには、選択の開始位置と終了位置を「見回す」という行に沿って何かをする必要があります。

おそらく、ルックアラウンドという言葉が示唆するように、解決策は正規表現にあります。ただし、私の正規表現スキルはかなり基本的なものなので、助けていただければ幸いです。

0 投票する
8 に答える
688 参照

regex - 後ろを見てください: 正規表現のすべての怒り?

最近の多くの正規表現の質問には、一致の成功に必要ではないように思われるクエリにある種のルックアラウンド要素があります。それらを推進している教育リソースはありますか?私は、どのような場合にポジティブなルック・アヘッド/ビハインドを使用した方がよいかを理解しようとしています. 私が見ることができる主なアプリケーションは、要素を一致させようとするときです。しかし、たとえば、最近の質問からのこのクエリには、 をキャプチャするための簡単な解決策があり.*ますが、なぜ後方参照を使用するのでしょうか?

そして、これは別の質問からのものです:

前向きなルックアラウンドを使用する方が本当に良いのはいつですか? いくつか例を挙げていただけますか?

これは意見に基づく質問に近いと思いますが、答えは本当に有益だと思います. 正規表現は、物事を複雑にしなくても十分に混乱します...私はこのページを読んで、それらがどのように機能するかよりも、いつ使用するかについてのいくつかの簡単なガイドラインにもっと興味があります.


すべての返信に感謝します。以下に加えて、ここでm.buettner の素晴らしい回答をチェックすることをお勧めします。

0 投票する
1 に答える
73 参照

regex - 間にテキストがあるルックアラウンド正規表現

[ERR]ログ エントリがあり、 を含むが含まない行を検索したいIsLocked

行の例:

正規表現だけで3行目を見つけたいです。私は試した

[ERR]しかし、 と の間にテキストがあるため、これは機能しませんIsLocked