問題タブ [negative-lookbehind]

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 投票する
1 に答える
52 参照

html - 複数行の正規表現はタグ内のタグを置き換えますか?

タグ内の単一行のb/ h2/ h3/ h4/タグをタグに置き換えたい。h5blockquoteh6

だから私はこれが欲しい:

これに置き換えられます:

blockquoteただし、別の行にあるタグ内にある場合のみ。blockquote解決策には、終了タグの後ろ読みと開始タグの否定後読みが含まれている必要があると考えていますが、blockquoteこれを実装する方法がわかりません。

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

ruby - このネガティブな後ろ姿が間違っているのはなぜですか?


一致が単語または数字で始まっていないかどうかを確認するために後ろを見るべきではありませんか? 有効な一致として「in」をまだ受け入れているのはなぜですか?

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

python - ファイル名のリストから画像シーケンスを見つけるための正規表現

以前に生成されたファイル名のリストから、フレーム シーケンスの一部である可能性があるファイル名を取得するには、正規表現文字列の助けが必要です。

シーケンス内のフレームは、通常、最小パディングが 3 で、先頭に a'.'または aが付き'_'ます。例外: ファイル名が数字と.jpg拡張子のみで構成されている場合 (例:0001.jpgなど0002.jpg)。可能であれば、これらすべてを 1 行の正規表現でキャプチャしたいと思います。

これが私がこれまでに持っているものです:

これで、 「 orが先行する」._ビットは実行されず、代わりに文字列内の.orを検索して正を返すことがわかりました。_否定的な後読みテストを少し試しましたが、構文が機能しません。

データのサンプルは次のとおりです。

私が求めている結果は、識別された 2 つのシーケンスです。

  1. GameAssets_.00000.jpgGameAssets_.00024.jpg
  2. 00000.jpg00018.jpg
0 投票する
0 に答える
26 参照

javascript - 区切り文字を検索するために match で使用する正規表現は何ですか? JavaScript の結果では実際にはそれらを除外しますか?

質問は、私がやろうとしていることよりも混乱を招く可能性があります。<title基本的に、html要素のコンテンツを取得したい:

これは私に与えます:

したがって、テキストのみにアクセスするには、を使用する必要がありますs[1]

スキップして、テキストだけで一致を作成する方法はあります"<title>foobar</title>"か? または言い換えると、match()「で区切られた文字列を検索します<a></a>が、結果の区切り文字は無視します」と伝える方法はありますか?

否定的な後読みなどを使っていろいろな表現を試みましたが、うまくいきませんでした。それが正しいアプローチであるかどうかさえわかりません。

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

regex - 正規表現の否定後読みと先読み: 同等性とパフォーマンス

.png や .css などの特定の拡張子で終わらない URL 文字列のみを選択する正規表現が必要です。

私は以下をテストしました:

1)これは否定的な後読みを使用しています:

https://regex101.com/r/tW4fO5/1

2) 否定的な先読みを使用するこの他のもの:

https://regex101.com/r/qZ7vA4/1

どちらも問題なく動作するようですが、#1 (否定後読み) は 436 ステップ (リンクを参照) で処理されると言われていますが、#2 (否定先読み) は 173 ステップで処理されると言われています。

だから私の質問は:それはどういう意味ですか?公演への影響はありますか?

そして最後に、2 つの正規表現は本当に機能的に同等なのでしょうか?

編集: ソリューションの概要

まとめとして、正規表現を介して除外される文字列末尾の完全なリストを考慮します (典型的なシナリオは、静的リソースが apache によって提供され、動的リソースが別のエンジンによって提供される Web サーバーのセットアップです - 私の場合: php-fpm)。

PCRE 正規表現では、次の 2 つのオプションが可能です。

1)否定後読み

$(?<!\.(?:ico|gif|jpg|png|css|rss|xml|htm|pdf|zip|txt|ttf)$|(?:js|gz)$|(?:html|woff)$)

https://regex101.com/r/eU9fI6/1

否定の後読みには固定幅のパターンが必要なので (つまり、異なる長さのパターンを混在させることはできません)、いくつかの OR 後読みを使用したことに注意してください。これにより、このオプションの記述が少し複雑になります。さらに、これは私の意見ではパフォーマンスを低下させます。

2)否定先読み

^(?!.*[.](?:js|ico|gif|jpg|png|css|rss|xml|htm|html|pdf|zip|gz|txt|ttf|woff)$).*$

https://regex101.com/r/dP7uD9/1

先読みは、後読みよりわずかに高速です。これは、100 万回の反復を行った場合のテスト結果です。

後読み時間= 18.469825983047 秒
先読み時間 = 14.316685199738 秒

可変長パターンの問題がなければ、よりコンパクトに見える後読みを選択します。どっちでもいいです。最後に、私は先読みに行きました:

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

regex - 中間に可変文字がある否定後読み正規表現 (PERL)

負の後読み正規表現に問題があります。stackoverflow の結果を読みましたが、よくわかりません。

私はゲームサーバーを運営しており、ユーザーのチャットを読み取り、禁止ワードを使用したユーザーをキックするツールを持っています。このツールは、PERL 正規表現エンジンを使用します。

私の禁止用語は、「バッグ」または「ディガー」の一般的な派生語だとしましょう。次の正規表現を使用して、これらの単語を含むチャット ラインを照合できます。

私の実際のリストには他の単語があります。

ただし、最初に警告を提供したいと思います。これはチャットに次のように表示されます。

所有者:「ディガー」とは言わないでください

そのため、"Owner:" が前にある場合、禁止単語リストと一致しないように否定後読みを使用してみました - ただし、":" と禁止単語の間に使用する正確なテキストを指定した場合にのみ機能します言葉 - 私はいつもするわけではなく、しばしば誤って自分自身と一致します.

私は使用しようとしました:

空白しかない場合に機能しますが、私が本当に欲しいのは一致しないことです:

所有者:ディガー

所有者: ディガー

所有者: 侮辱としてバッグを使用しないでください

所有者:(その他はこちら)dig

などですが、次のように一致します。

(その他):(コロンの後に続くものに関係なく、禁止された単語)

ゼロ幅のアサーション (頭を包むことができない) が原因で、この構文で必要なことが可能であるかどうか、または正規表現 fu が単に弱いかどうかはわかりません。

いくつかのチュートリアルを試し、regex101 パーサーを使用しましたが、必要なものがまったく得られません。助けてください。

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

javascript - JavaScriptの正規表現は、特定の属性内にないものと一致します

HTMLタグの特定の属性セット内にないURLを一致させたいとしましょう。

url3 と url4 のみを一致させたいので、次のようにしてみました。

問題は、否定的な先読みアサーションの前に何かが必要であり、数字がまだ有効であるため、数字を引用符で囲むことができないことを保証できないため、この否定的な先読みアサーションの背後に置く合理的なものがないことです。

アサーションの背後に否定的な見方を使用できた場合、それは非常に簡単ですが、それをサポートしていない JavaScript を使用しているため、これを達成する方法についてのヘルプを探しています。

正規表現のみのソリューションを探しています。

編集:

URLを見つけるために使用したURL正規表現:

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

regex - 特定の形式に一致する正規表現 - 1 つの大文字の単語が 2 つではありません

ケース:

1 と 2 は一致するはずですが、3 と 6 は一致しないはずです。() の前のセクションに 2 つの単語があります。(?!\s) または (?!\b) を実行して次の単語を無視しようとしましたが、代わりに前の文字に戻って無視するようです。

結果

アップデート:

一般的なパターンは

個人は大文字の名前を 1 つしか持つことができませんが、NPC はさまざまな大文字の名前を 2 つ持つことができます... King Jheric vs wolfen berserker vs zealot warrior.

あいまいでなければならない理由は、次のようなパターンに一致する必要があるためです

更新 2:

これにより、最初または2番目の「もの」が2つの単語を持ち、そのうちの少なくとも1つが大文字である場合を除いて、オリジナルを含む上記のすべてのケースが解決されます。