2

0 または 1 の '?' を作成するのに問題があります。javascript で、ゼロよりも 1 つのオカレンスを優先します。

元。これは私の正規表現です:(=1)?

これは私の文字列、str です:abcd=1

私がそうregex.exec(str)すると、次のものが返されます: ["",undefined]. 文字列の先頭で長さゼロの一致を選択しているようです。「=1」を選択させる方法はありますか? おそらくこれは他の言語では異なる動作をするかもしれませんが、私は現在 JavaScript を使用しています。

4

3 に答える 3

3

この式(=1)? 0 回よりも 1 回出現することを優先しますが、正規表現エンジンは常に文字列のできるだけ早い段階で一致を試みます。したがって、文字列の最初の文字から始めて、最初に一致を試みて=1失敗し、次に?空の文字列と一致するためです。

次の表現があなたの意図に最も似ていると思います。

(?:.*(=1))?

これは、文字列内のどこかにある場合は最初のキャプチャ グループに入れられますが、非キャプチャ グループをオプションにする=1ため、すべての文字列が引き続き一致します。?

于 2013-06-11T16:45:31.787 に答える
1

デフォルト?では、javascript で貪欲です。あなたの問題は別の場所にあります。

余談:?怠惰にするには、書く必要があります??(他の量指定子と同様)

于 2013-06-11T16:46:05.480 に答える
0

(=1)*一致します=1=1=1=1=1=1=1=1

その後のすべての数字を一致させたい場合は、=次を使用します

abcde=(\d+)

これにより、すべての数字がキャプチャ グループ 1 に配置されます。

于 2013-06-11T16:41:34.730 に答える