如何在不影响Javascript中日期的情况下捕获和替换字符串中的int和float?

如何在不影响Javascript中日期的情况下捕获和替换字符串中的int和float?,javascript,regex,Javascript,Regex,我有一根绳子,看起来像下面这样 您的统计数据:趋势正在上升。2018-12-09年x*y的最新值为469.44。2018-12-08年的最大值为2896,2018-12-08年的最小值为23.1。此外,中位数为367.95,模式为23.1。错误/错误的幅度更大 如您所见,我在字符串中得到了一些float和int。我需要用这些事件周围的span标记替换所有这些事件 在这里,我设法做了一些基本的事情,比如用XXX替换float和int的实例。但问题是也会出现date,这会使操作出错。我就是这么做的:

我有一根绳子,看起来像下面这样

您的统计数据:
趋势正在上升。
2018-12-09年x*y的最新值为469.44。
2018-12-08年的最大值为2896,2018-12-08年的最小值为23.1。
此外,中位数为367.95,模式为23.1。
错误/错误的幅度更大

如您所见,我在字符串中得到了一些
float
int
。我需要用这些事件周围的
span
标记替换所有这些事件

在这里,我设法做了一些基本的事情,比如用
XXX
替换
float
int
的实例。但问题是也会出现
date
,这会使操作出错。我就是这么做的:

var string = "Your statistics:<br>The trend is going up.<br>The most recent value for x*y on  2018-12-09 is 469.44.<br>The max was 2896 on 2018-12-08 and  min was 23.1 on 2018-12-08.<br>Additionally, the median is 367.95 and the mode is 23.1.<br>There is higher margin for error/mistake."

string = string.replace(/\d+/g, "XXX");
console.log(string)
如何确保日期不被打乱?

/(

(?-负向后看。我们不需要捕获那些有
-\d*
向后看的数字。
\d
-数字,匹配0到9之间的任何数字。
*
-零次或多次

\d+(\.\d+)
-
\d+
1到多次之间的任意数字(整数),
(\.\d+)
-
\.
点符号,
\d+
任何数字(浮点数),
-“惰性”匹配,表示“零或一个匹配”

(?!\d*-)
-负前瞻。我们也不需要带
-
的数字

let bubu=document.getElementById('bubu');
bubu.innerHTML=bubu.innerHTML
.替换(/(?“”+匹配+“”)
.red{color:red;}

您的统计数据: 这一趋势正在上升。 2018年12月9日x*y的最新值为469.44。 2018-12-08年的最大值为2896,2018-12-08年的最小值为23.1。 此外,中值为367.95,模式为23.1。


错误/错误的余地更大。

这项工作无需后顾之忧:

var string=“您的统计数据:
趋势正在上升。
2018-12-09年x*y的最新值为-469.44。
2018-12-08年的最大值为2896,2018-12-08年的最小值为-23.1。
此外,中位数为367.95,模式为23.1。
错误/错误率较高。” string=string.replace(/(\s)(?\d+(?:\.\d+)([.\s])/g,“$1$2$3”);
console.log(字符串)
另一个不需要查找的解决方案

var string=“您的统计数据:
趋势正在上升。
2018-12-09年x*y的最新值为469.44。
2018-12-08年的最大值为2896,2018-12-08年的最小值为23.1。
此外,中位数为367.95,模式为23.1。
错误/错误的幅度更大。” 让newStr=string.replace(/(\d+[^-]\d+\s\d\s)(?=[^-0-9])/g,str=>`${str}`)
console.log(newStr)
嘿,你想重新检查你的解决方案吗?代码段没有运行,当我尝试在我的系统中本地运行它时,我收到了以下错误
“无效的正则表达式:无效的组说明符名称”
-它可以工作,但具有纯浏览器支持。现在正在尝试查找lookbehind的旧版本)也许…我很高兴我们有这样的机会,这样我们就不必担心regex@SouvikRay:De rien;),很高兴它能帮上忙。@Toto Hi friend!我需要一点帮助。有什么办法可以把负数也包括在内吗?比如
-124.33
-21
-0.22
等等。所以我想把负数和数字都包括在内。你可以用修改过的正则表达式对答案进行编辑。@SouvikRay:只需在第一个正则表达式之前添加
-?
\d+
,请参阅我的编辑这对只包含1位数字的数字不起作用。一个连续的下选程序正在运行,所有答案都被下选!但是你的正则表达式还有一个问题,它将
blah 12 34 blah
更改为
blah 12 34 blah
而不是
blah 12 34 blah,谢谢你的反馈。无论如何,我没有我在这里是为了向别人学习和帮助别人。不是为了与任何人竞争。我不知道如何证明这一点,但我知道我没有投反对票:)。再次感谢您的反馈!忘记你刚才说的话,回到讨论中。这个问题没有两个连续的数字。所以我认为这应该仍然有效。别担心,我肯定不是你投了反对票。有时人们会在没有解释的情况下否决投票。
Your statistics:<br>The trend is going up.<br>The most recent value for x*y on  XXX-XXX-XXX is XXX.XXX.<br>The max was XXX on XXX-XXX-XXX and  min was XXX.XXX on XXX-XXX-XXX.<br>Additionally, the median is XXX.XXX and the mode is XXX.XXX.<br>There is higher margin for error/mistake.
Your statistics:<br>The trend is going up.<br>The most recent value for x*y on  2018-12-09 is <span>469.44</span>.<br>The max was <span>2896</span> on 2018-12-08 and  min was <span>23.1</span> on 2018-12-08.<br>Additionally, the median is <span>367.95</span> and the mode is <span>23.1</span>.<br>There is higher margin for error/mistake.