Javascriptの複雑な通貨の正規表現のヒント?
-
06-07-2019 - |
質問
ウェブページ内の数字を無限に一致させる必要があります。
次のすべての形式に一致させる必要があります:
100 $
99$
$99
$ 8
$.99
$ .8
$ 99.8
.99$
.99 $
9.2 $
1.2$
コンマを使用した同等物:
444,333
22,333
1,222
11,111,111
333,333,333,333.01132
またはスペース:
444 333
22 333
1 222
11 111 111
333 333 333 333.01132
これは私にとって本当に難しいものです。私は正規表現で遊ぶことに慣れていますが、私は完全に何か弾丸の証拠を書くことに失敗しています。通常、 http://www.regexlib.com には解決策がありますが、この解決策はありません。
プレーンテキストの検索/置換なので、正規表現を使用する以外の方法は考えられません。
解決
これは、指定したすべての数値形式に一致する正規表現です。
^(?:\$\s*)?(?:(?:\d{0,3}(?:[, ]\d{0,3})*[, ])+\d{3}|\d+)(?:\.\d*)?(?:\s*\$)?$
分類するには:
-
^(?:\ $ \ s *)?
は、文字列の先頭でオプションの$を探し、その後に任意の量のスペースが続きます -
(?:(?:\ d {0,3}(?:[、] \ d {0,3])* [、])+ \ d {3} | \ d *)
は、コンマまたはスペースで区切られたグループに分割された番号のいずれかに一致します(\ d {0,3}(?:[、] \ d {0,3})* [、])+ \ d {3}
)または数字の文字列(\ d +
)-したがって、123,456,789、123 456 789、および123456789はすべて一致します。正規表現は、不適切なグループ化を持つ数値を受け入れません(したがって、123,45,6789は一致しません) -
(?:\。\ d *)?
は、オプションの小数部とその後の任意の数の数字と一致します -
(?:\ s * \ $)?$
は、任意の量のスペースが前にある、文字列の末尾のオプションの$と一致します。
他のヒント
なぜ複数の正規表現を書くことができ、それらを順番に適用するのか?
1行ずつ繰り返し処理できると想定しています(?)。カンマに精通した正規表現を試してみて、その後にスペースに精通した正規表現などを試してみてください。一致するものがある場合は、残りを試行せずに、結果を保存して次の行に進みます。
2つのステップでこれを行うことについてはどうですか:
最初にすべてのスペースを ''
に置き換えますその後、数値の書式設定が常に同じ場合、コンマを ''
に置き換えることができますその後、非常に簡単になりましたか?
所属していません StackOverflow