批量新增題目功能(正規表示式的使用案例)

2022-02-15 23:58:48 字數 4047 閱讀 9429

根據業務需求,需要有乙個批量新增題目的功能。

如上圖所示,左邊是純文字輸入的題目,右邊需要解析成乙個個對應的題目。

右邊的題目就是乙個元件,根據不同的型別進行顯示,這個元件這裡不做談論。這裡要做的就是根據左邊的文字內容,解析成乙個個物件的形式,傳入右邊的元件進行渲染。

這篇文章,就是如何把左邊的純文字,解析成乙個個的物件,這就考驗文字的拆分能力了。

第一步當然是指定規則,不然沒法知道以什麼的方式進行解析。

這裡為了方便處理,對每個題目型別的格式加以限定,每個題目之間也用空行進行分隔。

1、每個題目之間必須以空行分割,題幹中間不得換行。

2、所有題型必須含有 「答案:」字段,且不能為空。

3、【選擇題】最多支援10個選項a,b,c,d,e,f,g,h,i,j,且必須按順序輸入。

4、【選擇題】選項號a-h與內容之間必須用 」、「 或 」.「 分隔開。

5、【選擇題】答案中不能加空格。

6、【判斷題】答案僅支援 「正確」,「錯誤」 或者 「對」,「錯」。

7、【填空題】每個空使用至少三個短下劃線 「___」 作為空的位置。

8、【填空題】多個填空的答案用 「|」 分割。每個填空有多個答案的話用 「&&」 分隔。單個答案不用新增。

9、【填空題】答案如果多於題目中需要填空的個數,多於的答案將被忽略。

10、【問答題】的答案可以為空。

11、【檔案上傳題】的答案必須為 「[檔案]」 。

下一步就是拆分每個題目。

以為核心就是一句正規表示式/\n\s*\n\s*/g,所以直接上**:

// 將批量題目分成乙個個題目字串

function geteachsub(whole) );}}

題目的型別總共分為:

每個題目的物件為:

解析的思路:

答案對了,判斷題型

否則

具體的**如下:

// 將乙個個題目字串拆解/組合成題目物件

function assemblesub(eachsub) ;

let ansarr = eachsub.match(/\n\s*答案[::]/g);

if(ansarr) else else if(sourcetimuarr.length > 11)

let valarr = ;

sourcetimuarr.map((item,i)=> else ;

subobj.items.push(obj);

valarr.push(obj.val);

}});

// 單選題

if(subobj.answer.length === 1)

} else }}

} else

}else /g).length;

let fillinans = regarr[1].split(/\s*\|\s*/g);

if(len>0 && len <= fillinans.length) )

});} else );}}

} else

}/**

* 判斷題

*/else if(regarr[1].trim() === '對'

|| regarr[1].trim() === '錯'

|| regarr[1].trim() ==='正確'

|| regarr[1].trim() ==='錯誤')

/*** 檔案上傳題

*/else if(regarr[1].trim() === '[檔案]')

/*** 問答題

*/else }}

} else

return subobj;

}

根據業務需求,需要有乙個批量新增題目的功能。

如上圖所示,左邊是純文字輸入的題目,右邊需要解析成乙個個對應的題目。

右邊的題目就是乙個元件,根據不同的型別進行顯示,這個元件這裡不做談論。這裡要做的就是根據左邊的文字內容,解析成乙個個物件的形式,傳入右邊的元件進行渲染。

這篇文章,就是如何把左邊的純文字,解析成乙個個的物件,這就考驗文字的拆分能力了。

第一步當然是指定規則,不然沒法知道以什麼的方式進行解析。

這裡為了方便處理,對每個題目型別的格式加以限定,每個題目之間也用空行進行分隔。

1、每個題目之間必須以空行分割,題幹中間不得換行。

2、所有題型必須含有 「答案:」字段,且不能為空。

3、【選擇題】最多支援10個選項a,b,c,d,e,f,g,h,i,j,且必須按順序輸入。

4、【選擇題】選項號a-h與內容之間必須用 」、「 或 」.「 分隔開。

5、【選擇題】答案中不能加空格。

6、【判斷題】答案僅支援 「正確」,「錯誤」 或者 「對」,「錯」。

7、【填空題】每個空使用至少三個短下劃線 「___」 作為空的位置。

8、【填空題】多個填空的答案用 「|」 分割。每個填空有多個答案的話用 「&&」 分隔。單個答案不用新增。

9、【填空題】答案如果多於題目中需要填空的個數,多於的答案將被忽略。

10、【問答題】的答案可以為空。

11、【檔案上傳題】的答案必須為 「[檔案]」 。

下一步就是拆分每個題目。

以為核心就是一句正規表示式/\n\s*\n\s*/g,所以直接上**:

// 將批量題目分成乙個個題目字串

function geteachsub(whole) );}}

題目的型別總共分為:

每個題目的物件為:

解析的思路:

答案對了,判斷題型

否則

具體的**如下:

// 將乙個個題目字串拆解/組合成題目物件

function assemblesub(eachsub) ;

let ansarr = eachsub.match(/\n\s*答案[::]/g);

if(ansarr) else else if(sourcetimuarr.length > 11)

let valarr = ;

sourcetimuarr.map((item,i)=> else ;

subobj.items.push(obj);

valarr.push(obj.val);

}});

// 單選題

if(subobj.answer.length === 1)

} else }}

} else

}else /g).length;

let fillinans = regarr[1].split(/\s*\|\s*/g);

if(len>0 && len <= fillinans.length) )

});} else );}}

} else

}/**

* 判斷題

*/else if(regarr[1].trim() === '對'

|| regarr[1].trim() === '錯'

|| regarr[1].trim() ==='正確'

|| regarr[1].trim() ==='錯誤')

/*** 檔案上傳題

*/else if(regarr[1].trim() === '[檔案]')

/*** 問答題

*/else }}

} else

return subobj;

}

批量新增題目功能(正規表示式的使用案例)

根據業務需求,需要有乙個批量新增題目的功能。如上圖所示,左邊是純文字輸入的題目,右邊需要解析成乙個個對應的題目。右邊的題目就是乙個元件,根據不同的型別進行顯示,這個元件這裡不做談論。這裡要做的就是根據左邊的文字內容,解析成乙個個物件的形式,傳入右邊的元件進行渲染。這篇文章,就是如何把左邊的純文字,解...

正規表示式類題目

例如 numsplit 1234567.1234 結果 1,234,567.1234實現 function numsplit num var n 1234567.1234 console.log numsplit n 解析 斷言部分 拆分正則 d 斷言 匹配後面不是數字的字元 d 匹配數字個數是3的...

正規表示式功能1

正規表示式 符合一定規則的表示式。作用 用於專門操作字串。特點 用於一些特定的符號來表示一些 操作。這樣就簡化書寫 所以學習正規表示式,就是在學習一些特殊符號的使用。好處 可以簡化對字串的複雜操作 弊端 符號定義越多,正則越長,閱讀性越差 具體操作功能 1,匹配 string matches方法。用...