ashita
V2EX  ›  问与答

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

  •  
  •   ashita · Oct 7, 2016 · 2095 views
    This topic created in 3532 days ago, the information mentioned may be changed or developed.

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

    js

    这是我在 Java 运行的结果

    java

    正则表达式如下:

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

    为什么会这样?求解答

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

    把 g 去掉,这样无论多少次都是 true
    var hyphenateRE = /([^-])([A-Z])/;
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3014 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 52ms · UTC 15:13 · PVG 23:13 · LAX 08:13 · JFK 11:13
    ♥ Do have faith in what you're doing.