2

金額とその他のテキストを含むテキストがあります。一部のドル金額には $ がありますが、その他にはありません。ここではいくつかの例を示します。

  • 1,000 ~ 15,000

  • $40

  • 4000

$ が存在しない場合は、各番号の先頭に $ を追加したいと思います。私の試み:

function convertToMoney(text) {
  if (!text.match(/\$/)) {
    return text.replace(/\b([\d,]+)\b/g, function(d) { return('$'+d); });
  }
  return text;
}

JS に後読みがある場合、使用します

function convertToMoney(text) {
  return text.replace(/(?<!\$)\b(?:\d)/g, '$');
}

長いソリューションを単純化できますか?

で動作させることはできます1000 up to $4000か?

アップデート

@jfriend00 ソリューションを適用すると、マネー フィルターは次のようになります。

function moneyFilter(text) 
  var ret = text;
  if (ret) {
    ret = ret
      .replace(/\.\d\d/g, '')                  // remove pennies
      .replace(/\B(?=(?:\d{3})+(?!\d))/g, ',') // add comma
      .replace(/(\$?)(\d[\d,]+)/g, "$$$2");    // add dollar sign
  }
  return ret;
})
4

3 に答える 3

2

これだけでどうですか:

function convertToMoney(text) {
    return text.replace(/(\$?)([\d,]+)/g, "$$$2");
}

実際のデモ: http://jsfiddle.net/jfriend00/y4k3k/

これは、任意の数字のシーケンス (オプションで $ 記号が先行する) を検索し、それをドル記号と数字のシーケンスに置き換えます。

正規表現にある が本当に\b必要な場合は、これもここに追加できますが、必ずしも必要であるとは思いませんでした。

于 2013-10-08T03:04:32.267 に答える
0

二重のドル記号を修正するだけです。

function convertToMoney(text) {
  if (!text.match(/\$/)) {
    newString = text.replace(/\b([\d,]+)\b/g, function(d) { return('$'+d); });
    return newString.replace(/\${2}/g, '$');
  }
  return text;
}
于 2013-10-08T03:16:20.203 に答える