0

私のChromeコンソールで、これを試しました:

>  "abcd".match(/(.+)+/)
<  ["abcd", "abcd"]

2 つmatchの「結果」が返されたという事実は、私にとって予想外で奇妙でした。私は Firefox でテストしましたが、結果は同じでした (したがって、これは何らかのバグではないと思います)。

ただし、Python では:

>  re.findall(r'(.+)+', 'abba')
<  ['abba']

これは説明できません。どうしたの?

4

2 に答える 2

2

javascript では、.match はグループ 0 (キャプチャなしの一致した式全体) とグループ 1 (キャプチャされたグループ) を与えると思いますが、Python の findAll は異なる動作をします-一致した部分全体 (グループ 0 ではなく、キャプチャされたグループのみを表示) )

于 2013-01-03T18:52:53.083 に答える
2

MDNによると:

正規表現に g フラグが含まれていない場合、regexp.exec(string) と同じ結果を返します。

そしてexecから:

返された配列には、最初の項目として一致したテキストがあり、次に、キャプチャされたテキストを含む、一致したキャプチャ括弧ごとに 1 つの項目があります。

したがって、返された配列の最初の項目は一致 ( "abcd") であり、2 番目の項目は括弧で囲まれた唯一のグループです (たまたま"abcd")。

于 2013-01-03T18:56:19.447 に答える