Javascript 我可以在text.replace函数的第二部分中使用regexp表达式的一部分吗?

Javascript 我可以在text.replace函数的第二部分中使用regexp表达式的一部分吗?,javascript,regex,Javascript,Regex,假设我有一个包含10km的文本,我想将其转换为m: var sample = "100km" sample = sample.replace(/(\d)+(km)/g,(d * 1000).toString() + "m") 这不起作用,因为我认为“d”不能被识别为来自regexp的。有办法解决这个问题吗?(我想使用文本中的“100”,并且,它可能在文本中出现多次,例如“100m 10m”等。)好的,您不能在替换字符串中进行计算。也就是说,在您的情况下,您可以简单地添加三个0: sample.

假设我有一个包含10km的文本,我想将其转换为m:

var sample = "100km"
sample = sample.replace(/(\d)+(km)/g,(d * 1000).toString() + "m")

这不起作用,因为我认为“d”不能被识别为来自regexp的。有办法解决这个问题吗?(我想使用文本中的“100”,并且,它可能在文本中出现多次,例如“100m 10m”等。)

好的,您不能在替换字符串中进行计算。也就是说,在您的情况下,您可以简单地添加三个
0

sample.replace(/(\d+)km/g, "$1000m")
$1
表示第一个捕获组,即
(\d+)

您可以使用
String#将
替换为回调,并执行以下计算:

sample = '123.456km';
sample = sample.replace(/\b(\d+(?:\.\d+)?)k(?=m)/g, function($0, $1) { return parseFloat($1)*1000; } );
//=> 123456m
或者您希望避免向前看:

sample = sample.replace(/\b(\d+(?:\.\d+)?)km/g, function($0, $1) { return parseFloat($1)*1000+'m'; } );

谢谢你的回答。所以我试着在repl中进行计算。字符串,它可以工作。然而,加上3个零可能并不总是有效的,因为它可能是一个十分感谢你的分贝!这在很大程度上是可行的,但是,它不适用于小数,我不知道为什么,例如:1.120km返回1.120000m是因为parseInt吗?谢谢,但这仍然给出了相同的结果:S我仍然得到123.456000 m,对于123.456km,我尝试使用parseFloat,但这也不起作用