Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将搜索文本解析为数组_Javascript_Arrays_Regex_Reactjs - Fatal编程技术网

Javascript 将搜索文本解析为数组

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"/

我尝试创建的内容:

我有1个输入,用户可以在其中搜索数据。他可以像这只猫一样搜索,也可以像《斯坦猫》这样用标签搜索。作者:斯坦猫年:1990年将寻找1990年拍摄的猫,作者是斯坦。当用户编写author:stancats year: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;i0{ searchTerms.pushparseTextSearchtextSearch; textSearch=[]; } searchTerms.pushparseCurrentTermcurrentTerm; }否则{ textSearch.pushcurrentTerm; } 如果i===splitInput.length-1&&textSearch.length>0{ searchTerms.pushparseTextSearchtextSearch; } }
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} />
})