V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lihongming
V2EX  ›  程序员

求个正则,如何匹配不在首尾的指定字符?

  •  
  •   lihongming · 2018-06-07 08:22:17 +08:00 via Android · 2655 次点击
    这是一个创建于 2365 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如我要匹配[0-9]+,但首尾的不匹配(首尾的连续数字都忽略),应该如何写呢?

    例:123abc45d678efg90,应该匹配到 45 和 678

    11 条回复    2018-06-08 10:41:06 +08:00
    ryd994
        1
    ryd994  
       2018-06-07 08:26:12 +08:00 via Android
    头尾用^[0-9]*先过滤掉
    ryd994
        2
    ryd994  
       2018-06-07 08:27:23 +08:00 via Android
    呃,^[0-9]+ 和 [0-9]+$
    ryd994
        3
    ryd994  
       2018-06-07 08:32:03 +08:00 via Android
    如果你是要 group capture 的话
    ^[0-9]*[^0-9]+([0-9]+)[^0-9]+[0-9]*$
    这样大概能行
    eggshell
        4
    eggshell  
       2018-06-07 08:39:15 +08:00
    零宽断言可以做到 (?<!^)(?<!\d+)\d+(?!\d+)(?!$)
    不过 应该有更好的写法吧。。
    zynlp
        5
    zynlp  
       2018-06-07 08:39:32 +08:00 via iPhone
    用断言吧
    Removable
        6
    Removable  
       2018-06-07 08:43:29 +08:00
    零宽断言应该可以的,不过如果你是用在 js 里的话,那除了 Chrome 外的浏览器都不支持后发断言
    eggshell
        7
    eggshell  
       2018-06-07 08:43:52 +08:00
    (?<!^\d*)\d+(?!\d+)(?!\d*$)
    liberize
        8
    liberize  
       2018-06-07 14:32:39 +08:00
    lihongming
        9
    lihongming  
    OP
       2018-06-07 15:36:01 +08:00 via Android
    @liberize 多谢,我对正则没学那么深入,这我都看不懂😂
    flowfire
        10
    flowfire  
       2018-06-08 10:28:49 +08:00 via iPhone
    @Removable Chrome 支持后发断言了?什么时候的事
    Removable
        11
    Removable  
       2018-06-08 10:41:06 +08:00
    @flowfire #10 不知道,我大概一个多月前用 js 写零宽断言的时候,在 Chrome 上一直没问题,当时我还很好奇资料上为什么说 js 不支持后发断言。
    后来测试人员说 ie 上有 bug,我才发现 ie 和火狐都不能正常使用后发断言,只有 chrome 可以
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5929 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 02:37 · PVG 10:37 · LAX 18:37 · JFK 21:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.