正規表現/'(.*)(?:(?:'\s*,\s*)|(?:'\)))/
とテストコードがあります('He said, "You're cool."' , 'Rawr')
(テストコードは、関数に渡されるパラメーターをシミュレートします)。
正規表現を理解した上で説明します。問題に光を当てることができれば幸いです。
1)/'
一致した文字列の先頭にある必要があることを意味します'
2)0回以上(.*)
を除くすべての文字をキャプチャすることを意味します
3)キャプチャしないことを意味しますが、ステップ4を実行してみてください。うまくいかない場合は、ステップ54を試してください
。 )はキャプチャしないことを意味しますが、0個以上の空白文字を含むaが必要であり、その後に0個以上の空白文字を含むaが続く必要があります
5)キャプチャしないことを意味しますが、\n
(?:(?:4)|(?:5))
(?:'\s*,\s*)
'
,
(?:'\))
')
したがって、これを返す必要があるようです(これが私が望むものです):
'
+ He said, "You're cool."
+' ,
しかし、それは戻ります:
'
+ He said, "You're cool."' , 'Rawr
+')
テストコードを('He said, "You're cool."' , 'Rawr'
(終了括弧なし)に変更すると、必要なものが返されますが、それを追加するとすぐに最後の括弧、それから私のOR演算子はそれがやりたいことを何でもしているようです。最初にカンマがあるかどうかをテストし、カンマがある場合はそこで中断し、括弧が1つない場合はチェックします。
手順4と手順5のスポットを切り替えてみましたが、それでもOR演算子は常にデフォルトの(?:'\))
側になっているようです。
可能な限り最短の金額に一致させるにはどうすればよいですか?
10649 次
1 に答える
23
あなたの問題はOR演算子ではないと思いますが、の貪欲さです.*
。文字列全体と一致し、次の式が一致するまでバックトラックします。このバックトラッキングプロセスの最初の一致は'He said, "You're cool."' , 'Rawr
+になります')
。.*?
代わりに試してください!
于 2012-08-29T16:16:54.897 に答える