Javascript 添加更多字符时正则表达式不匹配
字符串1: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 字符串
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]
防止仅匹配点