用点代替数字

Replace Numbers with dots

本文关键字:数字      更新时间:2023-09-26

我试图将系统中的一些ID号码替换为可点击的号码以打开相关记录。问题是,它们有时是这种格式:123.456.789。当我使用正则表达式时,我可以替换它们,它工作得很好。问题发生时,我也有IP地址,其中正则表达式也匹配:123.[123.123.123]([]表示它匹配)。

我怎样才能防止这种行为?

我尝试这样做:/^(?!'.)([0-9]{3}'.[0-9]{3}'.[0-9]{3})(?!'.)/

我正在研究票务系统中的"笔记"。当注释只包含ID或IP时,regexp是有效的。当它包含更多像

这样的文本时
Affected IDs:
641.298.855 (this, lead)
213.794.868
948.895.285

那么它就不再匹配我的id了。你能帮我解决这个问题并解释我做错了什么吗?

添加gm修饰符:

/^(?!'.)([0-9]{3}'.[0-9]{3}'.[0-9]{3})(?!'.)/gm
https://regex101.com/r/pK1fV4/2

您不需要在开始时使用负面向前看,也不需要包括g修饰符,仅m修饰符对于这种情况就足够了,因为^匹配一行的开始,下面的模式将匹配仅存在于开始的字符串,因此它不会做任何全局匹配(即,在单行中进行两个或更多匹配)。

/^([0-9]{3}'.[0-9]{3}'.[0-9]{3})(?!'.)/m

出于性能考虑,您进一步不需要使用捕获组。

/^[0-9]{3}'.[0-9]{3}'.[0-9]{3}(?!'.)/m