答えて
最初のものは、正の先読みが言って、だけ主張である「数字が続くゼロ以上の文字がなければなりません。」少なくとも1桁の数字を含む文字列と照合すると、アサーションが真であるかどうかがわかりますが、一致するテキストは空の文字列になります。
2番目のものは、「数字が必要です」という一致の後にアサーション(肯定先読み)で一致するものを検索します。一致するテキストは、文字列内の最後の数字の前の文字(前の数字も含めて、.*
は貪欲なので、最後の数字がアサーションによって必要とされるため、最後の数字まで消費されます)。
注マッチオブジェクトの結果の違い:
var str = "foo42";
test("rex1", /(?=.*\d)/, str);
test("rex2", /.*(?=\d)/, str);
function test(label, rex, str) {
console.log(label, "test result:", rex.test(str));
console.log(label, "match object:", rex.exec(str));
}
出力(スニペットを実行することができない人のための):どのように試合結果
rex1 test result: true rex1 match object: [ "" ] rex2 test result: true rex2 match object: [ "foo4" ]
お知らせ2番目のケースではfoo4
(文字列foo42
)ですが、最初のケースでは空白です。 。
詳細
で 以下の違いを見つけてください*(改行を除く)任意の文字に一致する意味
(?= \ d)は肯定先読みを意味します - 以下の正規表現はDの試合\ を一致させることができることをアサート数字[0-9]
(= * \ dは?。)
CapturingGroup
MatchOnlyIfFollowedBy
シーケンス:試合順
で以下のすべての 繰り返し
AnyCharacterExcept \ nは
0回以上
桁
*(= \ dは?)
シーケンス:。ために、以下のすべてに一致
繰り返し
AnyCharacterExcept \ nは
0回以上
CapturingGroup
MatchOnlyIfFollowedBy
数字
(?=...)
は、positive lookaheadです。これらの式はどちらも "任意のテキストの後ろに数字"と一致します。しかし、違いは、(?=...)
は、一致する文字を「食べる」(「キャプチャ」しない)ということです。実際の目的のために、これがあなたの正規表現に含まれる唯一のものなら、同じものにマッチします。しかし、.*(?=\d)
は、あなたが質問に入れたものより多くのものがない限り、より正確な表現になります。あなたはキャプチャグループか、正規表現を実行した後にマッチしたテキストの内容を使用している使用しているとき
それは本当に重要です:
あなたは番号の前にすべてのテキストをキャプチャしたい場合
(.*?(?=\d))
?
はマッチが非貪欲になり、それが唯一の最初の数まで一致します:ではなく、番号自体、そして後にそれを使用する、あなたはこれを行うことができます。数字に至るすべてのテキストは、最初のグループと一致する結果になります。
- 1. これらの2つのコードの違いは何ですか?
- 2. これらの2つのコードの違いは何ですか?
- 3. これら2つのJavaコードの違いは何ですか?
- 4. これら2つの.htaccessコードの違いは何ですか?
- 5. これらの2つのAJAXリクエスト構文の違いは何ですか?
- 6. これら2つのSQL文の違いは何ですか
- 7. 次の2つのAngularJS構文の違いは何ですか?
- 8. これらの2つのJavaデータ構造の違いは何ですか?
- 9. Qtウィジェットプロモーション:これらの2つのコードの違いは何ですか?
- 10. 2つの構文の違いは何ですか?
- 11. これらの2つのインポートステートメントの違いは何ですか?
- 12. これらの2つのCSSの違いは何ですか?
- 13. これらの2つのクエリの違いは何ですか
- 14. これらの2つのコードセグメントの違いは何ですか。
- 15. これらの2つのインポートステートメントの違いは何ですか?
- 16. これらの2つのバインディングの違いは何ですか?
- 17. ES6のこの2つの構文の違いは何ですか?
- 18. この2つのコードの違いは何ですか?
- 19. Haskell Concurrent.Channel:この2つのコードの違いは何ですか?
- 20. これら2つの宣言の違いは何ですか?
- 21. これらの2つの違いは何ですか?
- 22. これら2つのJava arrayList.add(の違いは何ですか)
- 23. これら2つのループの違いは何ですか?
- 24. これら2つのステートメントの違いは何ですか?
- 25. これら2つのクラスの違いは何ですか?
- 26. これら2つの配列の違いは何ですか?
- 27. これら2つのステートメントの違いは何ですか?
- 28. これら2つの定義の違いは何ですか
- 29. これら2つのJOINの違いは何ですか?
- 30. これら2つのSQLスクリプトの違いは何ですか?
参照用に正規表現パーサ/デコーダを少し見つけてください http://www.myezapp.com/apps/dev/regexp/show.ws https://regex101.com/ –