1

私は文字列を持っています:

var doi_id= "10.3390/metabo1010001"

そして、最後から最初の一連の数字のみを一致させたいと思います。

そのために、私はこの正規表現を使用しています:

var doinumericpart = doi_id.match(/(\d*)$/);

「問題」(またはそうでない)は、 doinumericpart が返すことです

1010001,1010001

1010001 の代わりに、理由がわかりません。

ここでこの正規表現を試しているとき: http://regexr.com?31htmすべて正常に動作しているようです。

助けてくれてありがとう。

4

3 に答える 3

8

match()想定どおりの配列を返します。最初の要素はパターンに一致した部分文字列全体であり、最初の要素以降にはサブパターンが含まれます。

あなたの場合、()パターン全体を囲んでいるので必要ありません。

var doinumericpart = doi_id.match(/\d*$/)[0];

配列を逆参照して、[0]必要な正確な要素を提供します。

于 2012-07-16T14:50:47.427 に答える
4

matchnullまたは一致の配列を返します。一致の数は、正規表現に含まれるキャプチャ グループの数によって異なります。のアイテム[1]が一致するので、次のことができます。

var doinumericpart = doi_id.match(/(\d*)$/)[1]; //Access second item in the matches array
于 2012-07-16T14:50:23.387 に答える
2

match完全一致と各キャプチャ グループを返すか、null一致がなかった場合は返します。

これは、何らかのコンテキストを提供する場合に役立ちます。

"10.3390/metabo1010001".match(/metabo(\d*)/)
// => ["metabo1010001", "1010001"]
  • metabo1010001試合全体です
  • 1010001最初のキャプチャ グループです
于 2012-07-16T14:51:12.263 に答える