我需要替换字符串中的小数点分隔符,并且小数点分隔符可以是点.(例如英语)或逗号,(例如德语)。所以我有变量sep用于包含分隔符字符串。

为了转换基于英语的十进制分隔符,我做了以下替换,但是我得到了,dd,dd而不是120,dd



var sep = '.';
var numberStr = '120.31';
numberStr = numberStr.replace(new RegExp(sep + '\\d{2}', 'g'), ',dd');
console.log(numberStr);





有人知道我哪里出问题了吗?

最佳答案

RegularExpressions中的点字符与单个字符匹配,而与实际字符本身无关(具体取决于编程语言/ regex引擎/使用的标志)。

如果要匹配点,则分隔符应转义正则表达式点选择符(例如var sep = '\\.';)以匹配实际的点,而不是“任何单个字符”。

因此会发生错误,因为在120.31中找到/替换了模式[any character followed by 2 numbers]两次,一次是120,一次是.31,因为1以及.匹配正则表达式点选择器'.'

有关详细信息,请参见Regex Cheat Sheet

10-06 01:08