我需要替换字符串中的小数点分隔符,小数点分隔符可以是点.
(例如英语)或逗号,
(例如德语)。所以我有变量sep
来包含分隔符字符串。
要转换基于英语的小数点分隔符,我会进行以下替换,但我得到,dd,dd
而不是120,dd
:
var sep = '.';
var numberStr = '120.31';
numberStr = numberStr.replace(new RegExp(sep + '\\d{2}', 'g'), ',dd');
console.log(numberStr);

有谁知道我哪里出错了?
答案 0 :(得分:3)
RegularExpressions中的点字符匹配单个字符,无论实际字符本身如何(详细信息取决于使用的编程语言/正则表达式引擎/标志)。
如果你想匹配一个点,你的分隔符应该逃脱正则表达式选择器字符,如var sep = '\\.';
以匹配实际的点,而不是'任何单个字符&#39 ;
所以您的错误发生了,因为在120.31
中找到/替换了两次模式[any character followed by 2 numbers]
,一次用于120
,一次用于.31
,另一种用于1
.
匹配正则表达式点选择器'.'
。
有关详细信息,请参阅Regex Cheat Sheet
答案 1 :(得分:1)
你需要通过在\
字符前面加上分隔符来逃避分隔符(这样它将由RegExp引擎处理):
var escapedSep = sep.replace(/[.?*+^$[\]\\(){}|-]/g, "\\$&");
numberStr = numberStr.replace(new RegExp(escapedSep + '\\d{2}', 'g'), ',dd');
否则.
被视为RegExp元字符,匹配任何符号(换行符除外)。