1

次のような文字列があります。

**********3600 - $20.00

そこから抽出する必要があり3600ます。文字列が動的であるため、特に 3600 を検索することはできません。また、文字列の先頭に異なる数のアスタリスクがある可能性があるため、位置に基づいて抽出することもできません。したがって、最後のアスタリスクの直後の 4 文字を抽出する正規表現が必要ですが、正規表現はあまり得意ではなく、アスタリスクは正規表現の予約文字であるため、エスケープする方法がわかりません。誰でも助けることができますか?

4

3 に答える 3

5

あなたはこれを行うことができます:

str.match(/^\**(\d+)/)

結果があれば、返される配列のインデックス 1 に格納されます。null数値の取得に進む前に、返された結果が であるかどうかを確認することをお勧めします。

予測

このソリューションでは、文字列任意の数*(数字が最初から始まる場合を許可します) で始まり、その後に抽出する一連の数字 (少なくとも 1 つの数字) が続くことを前提としていることに注意してください。

説明

/^\**(\d+)/
  • /先頭と末尾は JavaScript リテラルの区切り文字ですRegExp
  • ^文字列の先頭に一致
  • \*正規表現では特別な意味を持つ*ため、literal に一致します。*make itの*直後に続く 0 個以上のアスタリスクのインスタンスに一致します*
  • (\d+):\d数字 (0 から 9 まで) に一致し、+1 回以上繰り返されることを意味します。はキャプチャ グループ()を作成し、この正規表現に一致するコンテンツを抽出できるようにします (上記のように、返された配列のインデックス 1 を数値として参照するとわかります)。
于 2013-03-11T17:29:59.927 に答える
2

すべての一致が最初の数字になる場合、実際には次のようにすることができます。

string.match(/\d+/);

最初の数字と一致します。グローバル フラグを追加しないため、最初の一致のみが取得されます。

于 2013-03-11T17:36:46.237 に答える
0

任意の 4 文字、または常に数字?

/^\**(\d{4})/   if it's just digits
/^\**(.{4})/    for any 4 random characters.
  ^---escape char

エスケープ文字としてのバックスラッシュに注意してください。

于 2013-03-11T17:30:30.677 に答える