Javascript 将搜索文本解析为数组
我尝试创建的内容: 我有1个输入,用户可以在其中搜索数据。他可以像这只猫一样搜索,也可以像《斯坦猫》这样用标签搜索。作者:斯坦猫年:1990年将寻找1990年拍摄的猫,作者是斯坦。当用户编写author:stancats year:1990时,应该用组件替换它Javascript 将搜索文本解析为数组,javascript,arrays,regex,reactjs,Javascript,Arrays,Regex,Reactjs,我尝试创建的内容: 我有1个输入,用户可以在其中搜索数据。他可以像这只猫一样搜索,也可以像《斯坦猫》这样用标签搜索。作者:斯坦猫年:1990年将寻找1990年拍摄的猫,作者是斯坦。当用户编写author:stancats year:1990时,应该用组件替换它 <div> <Label type="author" value="Stan"/> <p>cats</p> <Label type="year" value="1990"/
<div>
<Label type="author" value="Stan"/>
<p>cats</p>
<Label type="year" value="1990"/>
</div>
-
映射数组并检查每个条目的类型-如果不是文本返回:
-
-
问题:
解析作者:Stan dogs cats year:1990,按照编写顺序将其放入数组中。我仍然不知道如何正确地执行,因为如果例如,我们应用regex,那么订单将不会被应用
我希望有人有一些想法。毫无疑问,你可以用regex做到这一点-你认为秩序不会被保留是很奇怪的-但你可以用老式的拆分和缩减来做到这一点
var input=作者:斯坦猫狗年份:1990年;
var result=input.split“”。reducefunctionp,c{
//确定我们是否有标签
ifc.indexOf':'>-1{
var items=c.split':';
p、 推送{type:items[0],value:items[1]};
}
否则{
//确定上一项是否为文本-如果是,则添加值
ifp[p.length-1]。类型==文本{
p[p.length-1]。值+=''+c
}
否则{
p、 push{type:'text',value:c};
}
}
返回p;
},[];
console.logresult 您可能希望测试边缘情况,最终我认为这不是一个很好的系统,但我认为下面的内容应该让您有一个良好的开端 让输入='作者:斯坦猫狗年:1990'; 让splitInput=input.split/\s+/; 设searchTerms=[]; const parseTextSearch=textSearchArray=>{ 返回{ 键入:“文本”, 值:textSearchArray。加入“” }; }; const parseCurrentTerm=term=>{ 让key=term.split':'[0]; 让value=term.split':'[1]; 返回{ 类型:键, 价值:价值 }; }; 让textSearch=[]; 对于let i=0;i
console.logsearchTerms;请将没有意义的奇怪标题更改为:将非简单文本解析为海量Ok,完成。更好?这是什么意思?这不是地道的英语-这篇文章中有什么内容?将搜索文本解析到数组中会更好?对不起,我的不好,修复了
[
{
type: "author",
value: "stan"
},
{
type: "text",
value: "dogs cats"
},
{
type: "year",
value: "1990"
}
]
array.map(({ type, value }) => {
if (type === 'text') {
return <p>value</p>
}
return <Label type={type} value={value} />
})