V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
older
V2EX  ›  问与答

请帮忙写个纯正则表式,除了指定几个数字段,其它的都匹配

  •  
  •   older · 2014 年 1 月 9 日 · 2688 次点击
    这是一个创建于 4395 天前的主题,其中的信息可能已经有所发展或是发生改变。
    要求是:除了指定几个数字段,其它的都匹配。我指定的数
    字如:2到9的数字,和10到12的数字。(这里的数字有时要改,可能会改为100到350等)
    9 条回复    1970-01-01 08:00:00 +08:00
    merlin852
        1
    merlin852  
       2014 年 1 月 9 日
    正则主要是针对string处理
    你这要求按数值比较,还会变动,还是用 > or < 比较好
    正则针对2位以上的数值处理真的很弱
    Mutoo
        2
    Mutoo  
       2014 年 1 月 9 日
    数字不多的话,可以全部列出来

    2~9 11,12,13:

    \b((11|12|13)?|[23456789])\b

    原则,字符串长的放前面,用分组+惰性匹配,短的放后面。
    Mutoo
        3
    Mutoo  
       2014 年 1 月 9 日
    @Mutoo 纠正一下,貌似不需要惰性匹配

    \b((11|12|13|15)|[23456789])\b

    > "0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 105".match(/\b((11|12|13)|[23456789])\b/g)
    ["2", "3", "4", "5", "6", "7", "8", "9", "11", "12", "13"]
    older
        4
    older  
    OP
       2014 年 1 月 9 日
    100到350 这样要写很长的吧
    older
        5
    older  
    OP
       2014 年 1 月 9 日
    @Mutoo 100到350 这样要写很长的吧
    binux
        6
    binux  
       2014 年 1 月 9 日
    又一个X-Y问题?这压根就不是一个正则文法吧
    Mutoo
        7
    Mutoo  
       2014 年 1 月 9 日
    @older 那样的话应该没办法纯正则了。

    你应该用回调函数来处理,匹配所有数字,然后传入处理就行了,大部分语言都支持。

    str.match(/\d+/g, function(n){
    var num = parseInt(n);
    // do something you want
    });
    liberize
        8
    liberize  
       2014 年 1 月 9 日
    楼主最好把应用场景说出来,应该有比用纯正则更好的方式
    yinheli
        9
    yinheli  
       2014 年 1 月 10 日
    最好是粘贴一些范例, 以及你需要得到的效果, 也好让大家测试
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   3696 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 04:23 · PVG 12:23 · LAX 20:23 · JFK 23:23
    ♥ Do have faith in what you're doing.