V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sunhk25
V2EX  ›  前端开发

js 正则分组匹配

  •  
  •   sunhk25 · 2018-01-15 17:22:53 +08:00 · 1412 次点击
    这是一个创建于 2482 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想捕获由 <> 标签标注的字符串,不知道下面这样的需求该如何实现。

    //var rawTagStr ="AA<中→>BBCC<←中>DD<黄→>EE<←黄>FF";//output OK:<中→>BBCC<←中>,2 <黄→>EE<←黄>,16
    var rawTagStr ="AA<中→>BB<青→>GG<←青>CC<←中>DD<←小>EEFF";//want: AA<中→>BB<青→>GG<←青>CC<←中>
    var rawTagStr ="AA<中→>BB<青→>GG<←青>CC<←中>DDEEFF";//want: AA<中→>BB<青→>GG<←青>CC<←中>
    var rawTagStr ="AA<中→>BB<青→>GG<←青>CCDDEEFF";//want: <青→>GG<←青>
    var rawTagStr ="AA<中→>BB<青→>GGCCDDEEFF";//want: null
    var reg = /(<[^>]{1,2}→>).+?(<←[^>]{1,2}>)/g;
    while((tagMatch = reg.exec(rawTagStr)) !== null) {
        var tag = tagMatch[0];
        toIdx = tagMatch["index"];
        console.log(tag + "," + toIdx);
    }
    
    sunhk25
        1
    sunhk25  
    OP
       2018-01-15 17:31:03 +08:00
    markdown 怎么会这样。。。
    chairuosen
        2
    chairuosen  
       2018-01-15 17:35:53 +08:00   ❤️ 1
    /<(.)→>.*<←\1>/g
    sunhk25
        3
    sunhk25  
    OP
       2018-01-16 09:11:25 +08:00
    @chairuosen 感谢
    var rawTagStr ="AA<黄→>EE<←黄>BBCCDD<黄→>EE<←黄>";
    再问一个,上面的正则这种情况会取最长范围(BBCCDD 会被包括在里面),求问如何修改
    sunhk25
        4
    sunhk25  
    OP
       2018-01-16 09:29:25 +08:00
    谢谢,/<(.)→>.*?<←\1>/g
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2709 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 02:15 · PVG 10:15 · LAX 19:15 · JFK 22:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.