带有正则表达式的Javascript字符串变量

时间:2011-07-08 17:13:41

标签: javascript regex

我无法理解为什么我不能将变量用于正则表达式字符串。请参见链接:http://jsfiddle.net/nmWuw/1/

它在没有变量的情况下工作,但在变量用于正则表达式时不起作用。我也逃过了我的反斜杠。输出应为'1,234,567,890'。

1 个答案:

答案 0 :(得分:3)

var regex = "/\\d(?=(?:\\d{3})+(?!\\d))/g, '$&,'";

这是一个字符串。它不是正则表达式对象和替换字符串。当它传递给replace时,它是一个参数,而不是两个参数。您需要单独传递两个参数:

var regex = /\d(?=(?:\d{3})+(?!\d))/g;
var replace = '$&,';
var num = 1234567890;

alert(String(num).replace(/\d(?=(?:\d{3})+(?!\d))/g, '$&,'));
alert(String(num).replace(regex, replace));
alert(regex);

http://jsfiddle.net/nmWuw/3/


请注意,可以在一次调用中定义它们,如果您真的想要,使用数组并apply

var regex = [/\d(?=(?:\d{3})+(?!\d))/g, '$&,'];
alert(String.prototype.replace.apply(num, regex));

http://jsfiddle.net/nmWuw/6/

然而,这并不是一个好主意 - 它很多难以阅读而且更不直观。