私はかなり気の利いたツール、underscore-cliを持っています。これは、ヘルプ/使用法情報を出力するときに最も奇妙な動作をします。
Usage()関数では、テキストのブロック(オプションなど)をインデントするためにこれを行います。
str.replace(/^/, " ");
この正規表現は、非常に明白であることに加えて、TJHollowaychukのcommander.jsコードから直接得られます。正規表現は正しいです。
それでも、使用法のテキストの途中に奇妙なスペースが挿入されています。このような:
コマンド: ..。 valuesオブジェクトのプロパティのすべての値を取得します。 <object>を拡張します。入力データのプロパティを上書きします。 デフォルト<object>入力データに不足しているプロパティを入力します。 any <exp>入力のいずれかの値が式をtrueにした場合、「true」を返します。式の引数:(値、キー、リスト) all <exp>入力のすべての値が式をtrueにすると、「true」を返します。式の引数:(値、キー、リスト) isObjectは、入力データが名前付きプロパティを持つオブジェクトである場合に「true」を返します isArray入力データが配列の場合は「true」を返します isString入力データが文字列の場合は「true」を返します ..。
99%の確率で、これはV8のバグである必要があります。
なぜこれが起こるのか、または最も簡単な回避策は何でしょうか?
うん、これは正確には1748年のV8バグであることがわかった。ツールで使用した回避策は次のとおりです。
str.replace(/(^|\n), "$1 ");