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

不懂就问, js 问题

  •  
  •   feiniu · 2019-10-14 10:56:45 +08:00 · 2899 次点击
    这是一个创建于 1627 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有一个 JavaScript 的需求

    给一个 字符串,按照规定切割为 数组。

    比如:

    var test = "你啊后啊撒发我发<blod>你好啊啊啊啊</blod>"

    想要得到的结果为:

    ["你", "啊", "后", "啊", "撒", "发", "我", "发", "<blod>", "你", "好", "啊", "啊", "啊", "啊", "</blod>"]

    自己太菜,没想到好的解决方法,各位 v 站大佬,能否指导指导

    第 1 条附言  ·  2019-10-14 11:28:53 +08:00
    "<>"这个没有嵌套,只有一层

    变化就是<>中的字符可能变化
    19 条回复    2019-10-17 09:37:04 +08:00
    waiaan
        1
    waiaan  
       2019-10-14 11:08:34 +08:00   ❤️ 1
    正则?
    shintendo
        2
    shintendo  
       2019-10-14 11:10:28 +08:00   ❤️ 2
    最好准确描述一下你所说的“规则”,从你的例子里看不出来
    Vegetable
        3
    Vegetable  
       2019-10-14 11:11:01 +08:00   ❤️ 1
    你要先描述一下,你的规则是什么,不要用例子来表达。
    这样可能会让你自己得到答案,也让想帮忙的人搞清楚点状况
    None123
        4
    None123  
       2019-10-14 11:11:22 +08:00   ❤️ 1
    正则
    mufeng
        5
    mufeng  
       2019-10-14 11:11:49 +08:00   ❤️ 1
    '你啊后啊撒发我发<blod>你好啊啊啊啊</blod>'.split(/(<[^>]+>|'')/)
    => ["你啊后啊撒发我发", "<blod>", "你好啊啊啊啊", "</blod>", ""]
    feiniu
        6
    feiniu  
    OP
       2019-10-14 11:18:14 +08:00
    @shintendo
    @Vegetable

    其实规则就是把 字符串中 有 "<>" 括起来的划分为一个“字”,
    ipwx
        7
    ipwx  
       2019-10-14 11:19:59 +08:00 via Android   ❤️ 1
    那 <abc<def>ghi> 怎么算? 一整个?
    feiniu
        8
    feiniu  
    OP
       2019-10-14 11:21:13 +08:00
    @ipwx 暂时没这种多层嵌套的,只会有一层 “<>”
    lijsh
        9
    lijsh  
       2019-10-14 11:22:55 +08:00   ❤️ 1
    先写个 parser
    seki
        10
    seki  
       2019-10-14 11:22:57 +08:00   ❤️ 1
    用 5 楼的方法,先把 <> 给分出来,再跑一遍把剩下的分开
    feiniu
        11
    feiniu  
    OP
       2019-10-14 11:23:52 +08:00
    谢谢大家🙏,我先用 5 楼的方法试试
    ipwx
        12
    ipwx  
       2019-10-14 11:31:57 +08:00   ❤️ 1
    过一遍就行,不用过两遍。

    https://ideone.com/dG4D2l
    jackchao7432
        13
    jackchao7432  
       2019-10-14 11:39:27 +08:00
    在飞牛?
    gbin
        14
    gbin  
       2019-10-14 11:48:47 +08:00   ❤️ 2
    不会正则也没事,遍历一次,遇到 `<` 存起来,知道遇到 `>` 视为一个 token 就好。
    https://ideone.com/Oc2N57
    gbin
        15
    gbin  
       2019-10-14 12:29:25 +08:00 via Android
    @gbin 仔细看了一下有一个 Bug,楼主自己根据需要修正一下, 如果 〈 没有闭合会导致 i 越界。
    feiniu
        17
    feiniu  
    OP
       2019-10-14 13:00:15 +08:00
    谢谢各位大佬 🙏🙏
    Zoro76
        18
    Zoro76  
       2019-10-16 16:27:14 +08:00
    如果只是你这种结构的字符串的话,可以试试这个 test.split(/(?=[\u4e00-\u9fa5<])/)
    meepo3927
        19
    meepo3927  
       2019-10-17 09:37:04 +08:00
    #14 楼的方法可以, 简单有效
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3005 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 14:42 · PVG 22:42 · LAX 07:42 · JFK 10:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.