変数である特定の数量詞を持つ文字クラスで正規表現を作成しようとしています。例:
var str = "1234.00";
var quantifier = 3;
str = str.replace(/(\d)(\d{quantifier}\.)/,"$1,$2");
//str should be "1,234.00"
これは次のように機能します(変数なし):
var str = "1234.00";
str = str.replace(/(\d)(\d{3}\.)/,"$1,$2");
//str == "1,234.00"
ただし、次のように、スラッシュで区切られたパターンの代わりに引用符で囲まれたパターンと同じ機能はありません。
var str = "1234.00";
str = str.replace("(\d)(\d{3}\.)","$1,$2");
//str == "1234.00" - not "1,234.00"
//quote symbol choice does not change this
str = str.replace('(\d)(\d{3}\.)',"$1,$2");
//str == "1234.00" - not "1,234.00"
編集:より明確にするために、以下に回答した要約質問を追加しました: 引用符で囲まれた文字列から補間変数を使用して正規表現を作成するにはどうすればよいですか?
私の好みは補間を使用することですが、(少なくともこのコンテキストでは)利用できないようであり、必要ありません。
また、同じ結果を達成するためにいくつかの正規表現リテラルを連結/結合する方法を考え出そうとしましたが、このユースケースではそうすることができませんでした。
補足として-私はperlのこのタイプの正規表現に精通しています:
my $str = "1234.00";
my $quantifier = 3;
$str =~ s/(\d)(\d{$quantifier}\.)/$1,$2/;
# $str eq "1,234.00"
これは次のように役立ちます。
my $str = "1234567890.00";
for my $quantifier (qw(9 6 3)) {
$str =~ s/(\d)(\d{$quantifier}\.)/$1,$2/;
}
# $str eq "1,234,567,890.00"
提供された提案/回答を使用して、次のようにサンプルの通貨文字列プロトタイプを作成しました。
String.prototype.toCurrency = function() {
var copy = parseFloat(this).toFixed(2);
for (var times = parseInt(copy.length/3); times > 0; times--) {
var digits = times * 3;
var re = new RegExp("(\\d)(\\d{" + digits + "}\\.)");
copy = copy.replace(re,"$1,$2");
}
return '$'+copy;
};
str = "1234567890";
str.toCurrency();
// returns "$1,234,567,890.00"