feiniu

不懂就问, js 问题

  •  
  •   feiniu · Oct 14, 2019 · 4010 views
    This topic created in 2578 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
    waiaan
    Oct 14, 2019❤️1
    1
    正则?
    shintendo
    shintendo
    Oct 14, 2019❤️2
    2
    最好准确描述一下你所说的“规则”,从你的例子里看不出来
    Vegetable
    Vegetable
    Oct 14, 2019❤️1
    3
    你要先描述一下,你的规则是什么,不要用例子来表达。
    这样可能会让你自己得到答案,也让想帮忙的人搞清楚点状况
    None123
    None123
    Oct 14, 2019❤️1
    4
    正则
    mufeng
    mufeng
    Oct 14, 2019❤️1
    5
    '你啊后啊撒发我发<blod>你好啊啊啊啊</blod>'.split(/(<[^>]+>|'')/)
    => ["你啊后啊撒发我发", "<blod>", "你好啊啊啊啊", "</blod>", ""]
    feiniu
    feiniu
    OP
    Oct 14, 2019
    6
    @shintendo
    @Vegetable

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

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