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

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

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

    2~9 11,12,13:

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

    原则,字符串长的放前面,用分组+惰性匹配,短的放后面。
    Mutoo
        3
    Mutoo  
       2014-01-09 14:46:48 +08:00
    @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-01-09 15:38:51 +08:00
    100到350 这样要写很长的吧
    older
        5
    older  
    OP
       2014-01-09 15:39:24 +08:00
    @Mutoo 100到350 这样要写很长的吧
    binux
        6
    binux  
       2014-01-09 15:46:36 +08:00
    又一个X-Y问题?这压根就不是一个正则文法吧
    Mutoo
        7
    Mutoo  
       2014-01-09 15:53:28 +08:00
    @older 那样的话应该没办法纯正则了。

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

    str.match(/\d+/g, function(n){
    var num = parseInt(n);
    // do something you want
    });
    liberize
        8
    liberize  
       2014-01-09 17:44:25 +08:00
    楼主最好把应用场景说出来,应该有比用纯正则更好的方式
    yinheli
        9
    yinheli  
       2014-01-10 01:57:33 +08:00
    最好是粘贴一些范例, 以及你需要得到的效果, 也好让大家测试
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1030 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:03 · PVG 06:03 · LAX 14:03 · JFK 17:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.