Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有字符类量词变量的JavaScript正则表达式_Javascript_Regex_Variables_Replace_Quantifiers - Fatal编程技术网

带有字符类量词变量的JavaScript正则表达式

带有字符类量词变量的JavaScript正则表达式,javascript,regex,variables,replace,quantifiers,Javascript,Regex,Variables,Replace,Quantifiers,我试图创建一个正则表达式,其中包含一个字符类,该字符类具有一个特定的量词,该量词是一个变量,例如: 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

我试图创建一个正则表达式,其中包含一个字符类,该字符类具有一个特定的量词,该量词是一个变量,例如:

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 == "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"
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"
编辑:为了更清楚,我添加了一个摘要问题,回答如下: 如何从带引号的字符串创建带有插值变量的正则表达式?

虽然我倾向于使用插值,但它似乎不可用(至少在这种情况下),也没有必要

我也试图想出一种方法来实现同样的结果,但在这个用例中却无法做到

作为旁注-我熟悉perl中的这种正则表达式:

my $str = "1234.00";
my $quantifier = 3;
$str =~ s/(\d)(\d{$quantifier}\.)/$1,$2/;
# $str eq "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"
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"

在JavaScript中,不能连接或插入正则表达式文字,但可以使用以下命令从字符串创建正则表达式:

顺便说一下,请注意:

str.replace(..., ...);
没有效果,因为
replace
不会修改字符串,而是返回一个包含替换内容的字符串副本。所以你需要写下:

str = str.replace(..., ...);

相反。

此语句存在两个问题:

str.replace("(\d)(\d{3}\.)","$1,$2");
第一个是传递的是字符串而不是正则表达式对象,第二个是在字符串文本中,反斜杠有特殊的含义来转义某些内容(例如,
“\n”
是换行符),因此要在字符串文本中有一个实际的反斜杠,需要将其加倍为
“\\”
。使用
RegExp()
构造函数从字符串创建regex对象,可以得到以下结果:

str.replace(new RegExp("(\\d)(\\d{3}\\.)"),"$1,$2");
因此,您可以从这里执行以下操作:

var quantifier = 3
str = str.replace(new RegExp("(\\d)(\\d{" + quantifier + "}\\.)"),"$1,$2");

您可以创建一个RegExp对象:

var str = "1234.00";
var digits = 2;
var re = new RegExp("(\\d)(\\d{" + digits + "})");
var str2 = str.replace(re,"$1,$2-");
str2
将包含
1,23-4.00

工作示例:

注意,您需要在字符串中转义
\
,因此
\


希望这能有所帮助。

您提到的第二个问题基本上包含了您正在寻找的答案。感谢您澄清了字符串与正则表达式对象的关系——如果可以,我将向上投票。上面进行了编辑以使用赋值运算符。感谢您建议转义\字符。这就是我需要的。