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

这个正则为什么一下是 true 一下是 false?

  •  
  •   Nbsaw · 2016-10-07 15:53:09 +08:00 · 1735 次点击
    这是一个创建于 2971 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这是我在 Chrome 控制台下的测试

    js

    这是我在 Java 运行的结果

    java

    正则表达式如下:

    var hyphenateRE = /([^-])([A-Z])/g;
    

    为什么会这样?求解答

    第 1 条附言  ·  2016-10-07 16:42:06 +08:00
    6 条回复    2016-10-07 18:09:08 +08:00
    laoyur
        1
    laoyur  
       2016-10-07 16:04:33 +08:00
    虽然我对具体的 api 不熟,但你显然两个环境用的是不同的 API ,一个是 test(),一个是 matches()
    hronro
        2
    hronro  
       2016-10-07 16:07:47 +08:00   ❤️ 2
    这是因为在 JS 中, RegExp 实例拥有的 test 方法,会从上次匹配字符串结束的地方开始匹配。第一次匹配完"-AB",后,第二次匹配会从'B'之后再开始匹配,自然就匹配不到了
    w88975
        3
    w88975  
       2016-10-07 16:26:03 +08:00   ❤️ 2
    每次正则匹配完 加一个
    hyphenateRE.lastIndex = 0
    w88975
        4
    w88975  
       2016-10-07 16:26:53 +08:00
    hyphenateRE.test('-AB');
    hyphenateRE.lastIndex = 0;
    hyphenateRE.test('-AB');
    ZhaoMiing
        5
    ZhaoMiing  
       2016-10-07 16:29:25 +08:00 via iPhone
    ls+1
    prefere
        6
    prefere  
       2016-10-07 18:09:08 +08:00
    g 修饰符用于执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
    http://www.w3school.com.cn/jsref/jsref_regexp_g.asp

    把 g 去掉,这样无论多少次都是 true
    var hyphenateRE = /([^-])([A-Z])/;
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2713 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 15:25 · PVG 23:25 · LAX 07:25 · JFK 10:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.