feiniu

不懂就问, js 问题

  •  
  •   feiniu · Oct 14, 2019 · 3638 views
    This topic created in 2430 days ago, the information mentioned may be changed or developed.

    有一个 JavaScript 的需求

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

    比如:

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

    想要得到的结果为:

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

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

    Supplement 1  ·  Oct 14, 2019
    "<>"这个没有嵌套,只有一层

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

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

    https://ideone.com/dG4D2l
    jackchao7432
        13
    jackchao7432  
       Oct 14, 2019
    在飞牛?
    gbin
        14
    gbin  
       Oct 14, 2019   ❤️ 2
    不会正则也没事,遍历一次,遇到 `<` 存起来,知道遇到 `>` 视为一个 token 就好。
    https://ideone.com/Oc2N57
    gbin
        15
    gbin  
       Oct 14, 2019 via Android
    @gbin 仔细看了一下有一个 Bug,楼主自己根据需要修正一下, 如果 〈 没有闭合会导致 i 越界。
    feiniu
        17
    feiniu  
    OP
       Oct 14, 2019
    谢谢各位大佬 🙏🙏
    Zoro76
        18
    Zoro76  
       Oct 16, 2019
    如果只是你这种结构的字符串的话,可以试试这个 test.split(/(?=[\u4e00-\u9fa5<])/)
    meepo3927
        19
    meepo3927  
       Oct 17, 2019
    #14 楼的方法可以, 简单有效
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4951 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 64ms · UTC 09:46 · PVG 17:46 · LAX 02:46 · JFK 05:46
    ♥ Do have faith in what you're doing.