javascript - 将字符串转换为对象数组
问题描述
目前我有这个字符串:
"Hello, I'm <%first%> <%last%>, and I <3 being a <%occupation%>. I am > blah";
如何将它分成一个如下所示的对象数组:
[
{ type: 'string', value: 'Hello, I'm ' },
{ type: 'token', value: 'first' },
{ type: 'string', value: ' ' },
{ type: 'token', value: 'last' },
{ type: 'string', value: ', and I <3 being a ' },
{ type: 'token', value: 'occupation' },
{type: 'string', value: 'I am > blah'}
]
字符串的模式是,如果我们找到一个看起来像这样的单词:<%word%>,那么我们将它作为一个类型为 token 的对象放入数组中。否则,我们将其作为类型字符串放入。我的问题是我们如何在代码中实现它。
我很难形成将成为value
key的短语value
。下面是我尝试实现的代码,但它是错误的。我的想法是有一个单词变量,它是空的,当它通过字符串时,它会连接单词以形成阶段。一旦它看到它在 and 之间<%
,%>
它将被赋予一个类型token
并推送到arrStr
数组中。
但是有两个问题:1)似乎使用此代码,正在生成从“H”到“He”到“Hel”到“Hell”到“Hello”的字符串的每次迭代。2)它似乎从不接触令牌。3) "hello" 中的第一个 "h" 以某种方式被省略了。
如何在不使用正则表达式的情况下做到这一点?
解决方案
var str = "Hello, I'm <%first%> <%last%>, and I <3 being a <%occupation%>. I am > blah";
var arr = str.split('<%');
var final = [], vala, thetype;
arr.forEach(val => {
vala=val.split('%>');
thetype='string';
if (vala.length>0) thetype='token';
final.push({type: thetype, value: vala[0]});
})
推荐阅读
- node.js - MongoDb 查询嵌套对象
- blueprintjs - 蓝图的 Select Component onItemSelect 在“Tab”键上触发
- angular - 停止 http 拦截器以覆盖从服务层角度传递的标头
- regex - grep : 多行 + 正向前瞻
- css - react-router Link中的按钮?
- api - Lumen API 网关使用它的数据库配置
- python - Python:ModuleNotFoundError 和“import”的跨计算机兼容性(即用于家庭作业提交)
- android - android - 毕加索 | 裁剪平方变换占用额外空间
- python - 将嵌套列表转换为 np.array 以进行张量模型预测不正确
- github - 使用 Github 操作的 Cypress <> Heroku 集成