2017-08-26 8 views
0

私はutil.format()を使って%f、%dなどを使って文字列をフォーマットする方法を知っています。誰かが、文字列からSCANNINGを有効にする補完的な関数(コンソール入力からではありません)を教えてください。例えばNode.jsのutil.format()の相補関数

:...

const util = require('util'); 
var weatherStr = util.format(`The temperature at %d o' clock was %f deg. C and the humidity was %f.`, 5, 23.9, 0.5); 
console.log(weatherStr); 

を実行

...生成...

The temperature at 5 o' clock was 23.9 deg. C and the humidity was 0.5. 

私は、次を実行していることを仕事とutilの機能を期待していましたコード...

const util = require('util'); 
var weatherStr = 'The temperature at 5 o' clock was 23.9 deg. C and the humidity was 0.5.'; 
console.log(util.????(tempStr, `humidity was %f.`)); 

...生成する...

0.5 

これはどれですか?私は23.9を抽出するので、 "parseFloat"は動作しないと思います。

私はJSとNodeを初めて使いましたが、私は "スキャン"機能を期待していました。私はscanf npmライブラリがあることを知っていますが、既存の文字列ではなくコンソール入力で動作するようです。私はJSとNode関数の中で "%f"の検索を行っていて、意外にもutil.formatがそれに言及した唯一のものと思われます。

答えて

0

おかげでtrincot!

実際には、scanf npmライブラリ(https://www.npmjs.com/package/scanf)が問題を解決します。私はちょうどそれをすべて読んでいなかった。私は "sscanf"(ダブルスに注意してください)もインストールしなければなりませんでした。 sscanfメソッド(パッケージページの一番下に表示されています)は、私が期待したとおりに動作します。

私はこのパッケージが一般的ではないことに驚いていますが、それは私が必要とするものです。再度、感謝します!

1

このようなスキャンライブラリはわかりませんが、正規表現を使用できます。ここでは、使用できるいくつかのパターンがあります:

  • 整数:[+-]?\d+
  • 進:[+-]?\d+(?:\.\d+)?

あなたはキャプチャグループにこれらを入れた場合、あなたはString#match戻っていることを配列から対応するマッチにアクセスすることができます:

var weatherStr = "The temperature at 5 o'clock was 23.9 deg. C and the humidity was 0.5."; 
 
console.log(+weatherStr.match(/humidity was ([+-]?\d+(?:\.\d+)?)./)[1]);

あなたは%d%fに対処することができるユーティリティ関数を作成することができます。

function scanf(input, find) { 
 
    var pattern = { 
 
     "d": "(\\d+)", 
 
     "f": "(\\d+(?:\\.\\d+)?)" 
 
    }; 
 
    find = find 
 
     // Escape characters for use in RegExp constructor: 
 
     .replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') 
 
     // Replace %-patterns 
 
     .replace(/((?:\\)*)%([a-z])/g, function (m, a, b) { 
 
      return a.length % 4 == 0 && b in pattern ? a + pattern[b] : m; 
 
     }); 
 
    var match = input.match(new RegExp(find)); 
 
    return match && match.slice(1).map(Number); 
 
} 
 

 
var weatherStr = "The temperature at 5 o'clock was 23.9 deg. C and the humidity was 0.5."; 
 
console.log(scanf(weatherStr, "humidity was %f")); 
 
console.log(scanf(weatherStr, "at %d o'clock was %f"));