不懂就问, js 问题

2019-10-14 10:56:45 +08:00
 feiniu

有一个 JavaScript 的需求

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

比如:

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

想要得到的结果为:

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

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

3030 次点击
所在节点    前端开发
19 条回复
waiaan
2019-10-14 11:08:34 +08:00
正则?
shintendo
2019-10-14 11:10:28 +08:00
最好准确描述一下你所说的“规则”,从你的例子里看不出来
Vegetable
2019-10-14 11:11:01 +08:00
你要先描述一下,你的规则是什么,不要用例子来表达。
这样可能会让你自己得到答案,也让想帮忙的人搞清楚点状况
None123
2019-10-14 11:11:22 +08:00
正则
mufeng
2019-10-14 11:11:49 +08:00
'你啊后啊撒发我发<blod>你好啊啊啊啊</blod>'.split(/(<[^>]+>|'')/)
=> ["你啊后啊撒发我发", "<blod>", "你好啊啊啊啊", "</blod>", ""]
feiniu
2019-10-14 11:18:14 +08:00
@shintendo
@Vegetable

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

https://ideone.com/dG4D2l
jackchao7432
2019-10-14 11:39:27 +08:00
在飞牛?
gbin
2019-10-14 11:48:47 +08:00
不会正则也没事,遍历一次,遇到 `<` 存起来,知道遇到 `>` 视为一个 token 就好。
https://ideone.com/Oc2N57
gbin
2019-10-14 12:29:25 +08:00
@gbin 仔细看了一下有一个 Bug,楼主自己根据需要修正一下, 如果 〈 没有闭合会导致 i 越界。
rabbbit
2019-10-14 12:32:00 +08:00
feiniu
2019-10-14 13:00:15 +08:00
谢谢各位大佬 🙏🙏
Zoro76
2019-10-16 16:27:14 +08:00
如果只是你这种结构的字符串的话,可以试试这个 test.split(/(?=[\u4e00-\u9fa5<])/)
meepo3927
2019-10-17 09:37:04 +08:00
#14 楼的方法可以, 简单有效

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/609070

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX