我需要替换字符串中的小数点分隔符,并且小数点分隔符可以是点.
(例如英语)或逗号,
(例如德语)。所以我有变量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