【问题标题】:Replace Numbers with dots用点替换数字
【发布时间】:2015-07-18 22:59:07
【问题描述】:

我正在尝试将我系统中的一些 ID 号码替换为可点击的号码以打开相关记录。问题是,它们有时采用这种格式:123.456.789。 当我使用我的正则表达式时,我可以替换它们并且它工作正常。当我也有正则表达式也匹配的 IP 地址时,问题会出现:123.[123.123.123]([] 表示它匹配的位置)。

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

我尝试过这样的事情:/^(?!\.)([0-9]{3}\.[0-9]{3}\.[0-9]{3})(?!\.)/

我正在处理票务系统中的“注释”。当注释仅包含 ID 或 IP 时,正则表达式正在工作。当它包含更多文本时:

Affected IDs:
641.298.855 (this, lead)
213.794.868
948.895.285

然后它不再与我的 ID 匹配。你能帮我解决这个问题并解释我做错了什么吗?

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    添加gm修饰符:

    /^(?!\.)([0-9]{3}\.[0-9]{3}\.[0-9]{3})(?!\.)/gm
    

    https://regex101.com/r/pK1fV4/2

    【讨论】:

    • 天啊。谢谢。我完全忘了添加修饰符。非常感谢。我觉得很垃圾^^'
    【解决方案2】:

    您不需要在开头使用负前瞻,也不需要包含g 修饰符,只需m 修饰符就足够了,因为^ 匹配行的开头并且以下模式将匹配仅在开头存在的字符串,因此它不会进行任何全局匹配(即,单行中的两个或多个匹配项)。

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

    为了性能,你进一步不需要使用捕获组。

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

    【讨论】:

    • 谢谢,你完全正确。我经常修改表达式,也许分组是从以前的状态留下的。我还发现 /m 足以满足我的需求,并且更适合我用来处理表达式结果的函数。
    • 我可以再向您寻求帮助吗?我使用了没有^ 的第二个表达式,因为它与字符串There is another ID: 123.123.123 不匹配。当我没有它时,它再次与123.[123.123.123] (the [] indicates where it matches).等IP地址匹配
    • 尝试(?:\s|^)([0-9]{3}\.[0-9]{3}\.[0-9]{3})(?!\.) 并从组索引 1 中获取您想要的字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 2013-06-23
    相关资源
    最近更新 更多