Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用替换点的变量创建正则表达式模式_Javascript_Regex_Replace - Fatal编程技术网

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

Javascript 使用替换点的变量创建正则表达式模式,javascript,regex,replace,Javascript,Regex,Replace,我需要替换字符串中的小数分隔符,小数分隔符可以是点(例如英语)或逗号,(例如德语)。因此,我使用变量sep来包含分隔符字符串 为了转换基于英语的十进制分隔符,我做了以下替换,但得到的是,dd,dd,而不是120,dd: var sep='; var numberStr='120.31'; numberStr=numberStr.replace(新的RegExp(sep+'\\d{2}','g','dd'); 控制台日志(numberStr)您需要通过在分隔符前面加上\字符来转义分隔符(以便Re

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

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

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

控制台日志(numberStr)您需要通过在分隔符前面加上
\
字符来转义分隔符(以便RegExp引擎按原样处理它):

var escapedSep = sep.replace(/[.?*+^$[\]\\(){}|-]/g, "\\$&");
numberStr = numberStr.replace(new RegExp(escapedSep + '\\d{2}', 'g'), ',dd');

否则,
将被视为RegExp元字符,匹配任何符号(换行符除外)。

您需要通过在分隔符前面加上
\
字符来转义分隔符(以便RegExp引擎按原样处理它):

var escapedSep = sep.replace(/[.?*+^$[\]\\(){}|-]/g, "\\$&");
numberStr = numberStr.replace(new RegExp(escapedSep + '\\d{2}', 'g'), ',dd');

否则,
将被视为RegExp元字符,与任何符号匹配(换行除外)。

正则表达式中的点字符与单个字符匹配,而与实际字符本身无关(详细信息取决于使用的编程语言/regex引擎/标志)

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

因此,出现错误是因为在
120.31
中,模式
[任何字符后跟2个数字]
被查找/替换了两次,一次用于
120
,一次用于
.31
,因为
1
以及
匹配正则表达式点选择器


有关详细信息,请参见

正则表达式中的点字符与单个字符匹配,而不考虑实际字符本身(详细信息取决于使用的编程语言/正则表达式引擎/标志)

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

因此,出现错误是因为在
120.31
中,模式
[任何字符后跟2个数字]
被查找/替换了两次,一次用于
120
,一次用于
.31
,因为
1
以及
匹配正则表达式点选择器


有关详细信息,请参见

,以澄清此。。。(我还没来得及回答,他就回答了),正则表达式以
\d{2}
结尾,这意味着点匹配所有内容。若要转义点,必须添加
\\
,以便显示点,而不是“匹配除换行符以外的所有内容”。但我应该看看basst314的答案。原因:那些额外的正则表达式。这是不必要的。如果你检查我的原始答案,你会发现那是第一个版本。但是你认为OP改变一个分隔符会发生什么呢?为了澄清这一点。。。(我还没来得及回答,他就回答了),正则表达式以
\d{2}
结尾,这意味着点匹配所有内容。若要转义点,必须添加
\\
,以便显示点,而不是“匹配除换行符以外的所有内容”。但我应该看看basst314的答案。原因:那些额外的正则表达式。这是不必要的。如果你检查我的原始答案,你会发现那是第一个版本。但你认为OP改变分隔符会发生什么?