Javascript 添加更多字符时正则表达式不匹配

Javascript 添加更多字符时正则表达式不匹配,javascript,regex,Javascript,Regex,字符串1: STARTRequestId:b4114e7d-a3e1-42c9-8104-87C34447F8version:$LATESTENDRequestId:b4114e7d-a3e1-42c9-8104-87C34447F8报告请求ID:b4114e7d-a3e1-42c9-8104-87C34447F8持续时间:301.78mBilledDuration:400mMemorySized:256MBMaxMemoryUsed:85MbinituDuration:258.30ms 字符串

字符串1:
STARTRequestId:b4114e7d-a3e1-42c9-8104-87C34447F8version:$LATESTENDRequestId:b4114e7d-a3e1-42c9-8104-87C34447F8报告请求ID:b4114e7d-a3e1-42c9-8104-87C34447F8持续时间:301.78mBilledDuration:400mMemorySized:256MBMaxMemoryUsed:85MbinituDuration:258.30ms

字符串2:
STARTRequestId:462e68f9-346f-48c0-8592-762F78E84010版本:$LATESTENDRequestId:462e68f9-346f-48c0-8592-762F78E84010报告请求ID:462e68f9-346f-48c0-8592-762F78E84010持续时间:108.69MB非法持续时间:200mmMorysize:128MB最大内存:85MB

在字符串1和字符串2之间,添加了
InitDuration:258.30ms

我正在尝试对上述输出进行正则化,目前我有:

/Duration:(?(!!.\..*\)[。\d]+)msBilledDuration:(?(!!.\..*\)[。\d]+)msMemorySize:(?(!!.\..*\)[。\d]+)MB/


上面的匹配在字符串2内,但在字符串1上。。。但是,当添加
InitDuration:258.30ms
时(字符串1),正则表达式将失败,并且未找到任何结果。我不需要额外的匹配,我的目标是保持
实际时间
计费时间
,和
内存化
,不管其余的是否存在。

您的模式与第一个字符串不匹配,因为前面的
(?!.\..*\)

负前瞻性声明右侧的内容不包含2个点,这将导致第一个字符串失败,因为存在
301.78
258.30ms

它将与第二个字符串匹配,因为只有一个值
108.69
包含一个点

如果您只想维护actualTime、billedTime和memorySize,那么可以省略前瞻。要防止仅使用
[。\d]+
匹配点,可以使用可选的小数部分
\d+(?:\。\d+)

模式可能看起来像

Duration:(?<actualTime>\d+(?:\.\d+)?)msBilledDuration:(?<billedTime>\d+(?:\.\d+)?)msMemorySize:(?<memorySize>\d+(?:\.\d+)?)MB

Duration:(?

我认为tt失败是由于前瞻
(?!.\.*)
和此值中的点
258.30ms
为什么需要前瞻?这样可以吗?请注意,命名捕获组在所有浏览器中都不受支持,例如Firefox不受支持。@Thefourthbird很好,我不需要在此处进行前瞻,但错过了这一点。可能使用
\d+(?:\。\d+)
而不是
[。\d]
防止仅匹配点