我不明白为什么我不能对正则表达式字符串使用变量。参见链接:http://jsfiddle.net/nmWuw/1/
它可以在没有变量的情况下工作,但当变量用于正则表达式时则不起作用。我也逃脱了反斜杠。输出应为“1,234,567,890”。
最佳答案
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));
然而,这并不是一个好主意——它更更难阅读,而且更不直观。
关于带有正则表达式的 JavaScript 字符串变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6627968/