前端解析js题目

carywomack944 云计算/大数据 1 次浏览 没有评论

后端返回的题目数据为:

#{“type”:“para_begin”,“style”:“math_text”}#计算49+499+4999=,下面哪一种计算方法最简便( )。#{“type”:“para_end”}#

/**  * 题目的题干字段解析  * @param stem  * @returns {any[]}  */ function getParagraph(stem) {     const pattern = /#{"type":"para_begin"[^}]*}#(.*?)#{"type":"para_end"}#/ig;     let paraList = stem.match(pattern);      const stemList = paraList.map(function (value) {         // 题干的段落个数         let stemItem = JSON.parse(value.match(/#{(.+?)}#/)[0].replace(/#/g, ''));         stemItem.children = [];          let childStem = /#{"type":"para_begin"[^}]*}#(.*?)#{"type":"para_end"}#/ig.exec(value)[1];          const list = getParagraphChild(stemItem.children, childStem);         stemItem.children = list;          return stemItem;     });     return stemList; }  /**  * 题目的解析字段解析  * @param {Array} explain  */ function getExplain(explainStr) {     const explain = getParagraphChild([], explainStr);     return explain; }  /**  * 解析段落内容,返回该段落队列  * 不只是解析题干字段,还包括选项字段、解析字段等等。  * @param {Array} stemList   * @param {String} str   * @returns {Array}  */ function getParagraphChild(stemList, str) {     var pattern = /#{(.+?)}#/g;     var match = pattern.exec(str);      // 正则匹配是否有返回值     if (!match) {         let obj = { type: 'text', text: str };         stemList.push(obj);     } else {         var index = match.index;         var lastIndex = pattern.lastIndex;          if (index !== 0) {             // 如果 index !== 0,说明 str 最前面还有一段文字             // 需要将文字添加到队列里面             const con = str.substring(0, index);             let obj = { type: 'text', text: con };             stemList.push(obj);              // 递归             getParagraphChild(stemList, str.substring(index, str.length));         } else {             var con = str.substring(0, lastIndex);             var obj = JSON.parse(con.replace(/(#)/g, ''));              if (obj.type === 'latex') {                 let block = obj.content.match(/{"type":"blank".*?}///g);                 block && block.forEach((val) => {                     // obj.content = obj.content.replace(val, `left[//right]`);                     obj.content = obj.content.replace(val, `MathQuillMathField{}`);                 });             }              stemList.push(obj);              if (lastIndex !== str.length) {                 // 如果 lastIndex !== str.length,说明 str 未全部解析完                 // 需要再递归解析 str                 getParagraphChild(stemList, str.substring(lastIndex, str.length));             }         }     }      return stemList; }  export { getParagraph, getExplain, getParagraphChild }; 

内容如有侵犯你的权益,请联系删除

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Go