我无法理解为什么我不能将变量用于正则表达式字符串。请参见链接:http://jsfiddle.net/nmWuw/1/
它在没有变量的情况下工作,但在变量用于正则表达式时不起作用。我也逃过了我的反斜杠。输出应为'1,234,567,890'。
答案 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);
请注意,可以在一次调用中定义它们,如果您真的想要,使用数组并apply
:
var regex = [/\d(?=(?:\d{3})+(?!\d))/g, '$&,'];
alert(String.prototype.replace.apply(num, regex));
然而,这并不是一个好主意 - 它很多难以阅读而且更不直观。