使用变量创建正则表达式模式以替换点

时间:2017-09-08 14:46:44

标签: javascript regex replace

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

要转换基于英语的小数点分隔符,我会进行以下替换,但我得到,dd,dd而不是120,dd



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




有谁知道我哪里出错了?

2 个答案:

答案 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元字符,匹配任何符号(换行符除外)。