問題タブ [regex-lookarounds]

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 に答える
2188 参照

java - 感嘆符の前向きな先読み

.jar!" "に一致するJava正規表現を作成しようとしています

キャッチは、マッチャーに感嘆符を消費させたくないということです。使ってみPattern.compile("\\.jar(?=!)")ましたが失敗しました。感嘆符をエスケープしたように。

誰かがこれを機能させることができますか、それともこれはJDKのバグですか?

更新:私はばかみたいに感じます、Pattern.compile("\\.jar(?=!)")働きます。Matcher.find()の代わりにMatcher.matches()を使用していました。

0 投票する
4 に答える
1116 参照

regex - オプション グループ内の正規表現先読み

URL を一致させているので、リクエストをコントローラー/ビューに接続できます。いくつかの URL には複数のオプションがあり、そのうちの 1 つだけが URL に続くものを持つことができますが、その後に続くものも必要です。名前付きグループとして利用できます。

例:

  • /admin/something #マッチ
  • /admin/something/新しい #match
  • /admin/something/new/id #失敗
  • /admin/something/edit #失敗
  • /admin/something/edit/id #match

他にも多くの可能性がありますが、例としては十分です。基本的に、URL が「new」で終わる場合は何も続くことができませんが、「edit」で終わる場合は編集するための ID も必要です。

これまで使用してきた正規表現:

空白を分解したバージョン:

ただし、URL が「/admin/something/edit/id」の場合、「アクション」グループは「edit/id」です。コントローラー内で少し文字列操作を使用して、アクションを... アクションだけに削減しましたが、前向きな先読みの方がはるかにクリーンになると思います。私はそれを機能させることができませんでした。

私が取り組んできた先読み正規表現: (「新規」には一致しますが、「編集」には一致しません [ID の有無にかかわらず])

ヒント/提案は大歓迎です。

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

regex - URL に末尾のスラッシュを追加する

Google で末尾にスラッシュ .htaccessを追加した結果はかなりの数ありますが、私が見つけたすべての例では、次の例のようにドメイン名を使用する必要があります。

私の問題は、ハードコードされたドメイン名がローカルの開発マシンで機能しないことです。mod_rewrite にドメイン名を明示的に伝えずに末尾のスラッシュを追加する方法はありますか?

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

regex - 正規表現の条件付きルックアヘッド/ルックバック?

先読みまたはその他のメカニズムを使用して、単一の正規表現で条件付きチェックを実行できるかどうかを尋ねたかったのです。

たとえば、私の正規表現では、前の値が 3 を超えていた場合は次の値を 0 ~ 5 の範囲に、前の値が 3 未満の場合は 0 ~ 9 の範囲を指定したいと考えています。

例えば:

[0-9] 次の一致は、前の値が 5 未満か 5 を超えたかに応じて、[0-5] または [0-9] のいずれかになります。

コードは次のように考えます。

これを A と呼びます--> [0-9][0-9]<-- これを B と呼びます

(A < 5) の場合 B [0-9] それ以外の場合 B [0-5]

これは単一の正規表現として可能ですか?

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

javascript - JavaScript: 良い部分; なぜ先読みは良くないのですか?

Douglas Crockfords Javascript: The Good Partsを読んでいます。正規表現の章を読み終わったところです。この章では、彼は JavaScript の\b、正の先読み(?=)と負の先読みを(?!) 「良い部分ではない」と呼んでいます。

彼は良くない理由を説明して\bいます (これは\w単語の境界検出に使用され、\wUnicode 文字を使用する言語では失敗します)、それは私には非常に良い理由のように思えます。

残念ながら、肯定的および否定的な先読みが良くない理由は除外されており、私はそれを思い付くことができません. 正規表現をマスターすることで、先読みがもたらす力を実感できました (もちろん、先読みがもたらす問題についても説明しています) が、それを「良くない部分」と見なすものは何も思い浮かびません。

JavaScript (ポジティブ | ネガティブ) 先読みまたは (ポジティブ | ネガティブ) 先読みが一般的に「良くない」と見なされるべき理由を説明できる人はいますか?

この質問をしたのは私だけではないようです: one and two

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

regex - 正規表現:前向きな先読みと単語の境界線の質問

こんにちはStackoverflowの人々!

私がこれらの言葉を持っていると仮定します:スマートフォン、スマートフォン

それらの中から部分文字列「phone」を一致させたい。ただし、どちらの場合も、最初のケースの「電話」ではなく、「電話」のみを返したいと思います。これに加えて、「電話」という単語が接尾辞のみである場合にのみ一致するものが必要です。たとえば、次のようになります。

fonephonetics(単なる例)は一致しません。

正規表現だと思いました

必要なものが得られますが、現在は「phones」と「phone」は一致していますが、「fonephonetics」は一致していません。「電話」はいらない。どちらの場合も「電話」が欲しいです。

何が間違っているのか、そして私に何ができるのかについてのアイデアはありますか?

前もって感謝します!

0 投票する
4 に答える
360 参照

regex - 正規表現、先読み、後読みの命名規則

なぜそれは直感に反するのですか?

/(?<!\d)\d{8}(?!\d)/、ここ(?<!\d)最初に来ますが、 lookbehindと呼ばれ、(?!\d) 次にlookaheadと呼ばれます。すべてが直感に反しています。

このように名前を付ける理由は何ですか?

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

regex - 正規表現のネガティブな先読み

この正規表現を変更する必要があります

これに一致します...

これと一致しないために...

これを試しましたが、運がありませんでした

どんな助けでも大歓迎です。

ありがとう、アル。

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

java - 先読みとグループ

Javaでは、のようなテキストでfoo <on> bar </on> thing <on> again</on> now、「foo」、「bar」、空の文字列、「thing」、「again」、「now」を検索するグループを含む正規表現が必要です。

私がそうする場合(.*?)<on>(.*?)</on>(?!<on>)、私は2つのグループしか得られません(foo bar、もう一度、そして私は「今」の終わりではありません)。

foo barの空の文字列(.*?)<on>(.*?)</on>((?!<on>))を取得した場合は、もう一度、空の文字列を取得します(ここでは「今」が必要です)。

魔法の公式は何ですか?

ありがとう。

0 投票する
4 に答える
1095 参照

regex - 正規表現のポジティブ先読みサブストリング

私は正規表現にかなり慣れていません。正規表現を使用するほど、正規表現が好きになります。次の条件を満たす必要がある正規表現に取り組んでいます。

  1. 英字で始める必要があります
  2. 次の3文字のうち、少なくとも1文字はアルファ文字である必要があります。
  3. 最初の4文字以降は、自動的に一致します。

現在、次の正規表現があります。^[a-zA-Z](?=.*[a-zA-Z]).{1}.*$

私が直面している問題は、私の前向きな先読み(?=.*[a-zA-Z]).{1}が、英字に続く次の3文字に制限されていないことです。

ここでコンセプトが欠けているような気がします。この表現には何が欠けていますか?

皆さんありがとう。