I need to find the actual line from the paragraph, the paragraph drawing by the markdown editor you can add a checkbox, radio, textbox, and paragraph through the editor.
The actual str is something like this,
this is paragraph line1
?[question_2]{"category":[]}[who are you]=[] {1,2}
[] OPTION 1
[] OPTION 2
[] OPTION 3
this is paragraph line3
?[question_3]{"category":[]}[picode]=_ [PLACEHOLDER_TEXT]
?[question_1]{"category":[]}[sex]=() {1}
() male
() femele
this is paragraph line3
Do all question types have to start with ?[sometext], so I can use this regex
radio -> [\?] ?[([0-9a-z_].?)]({(?:[^{}]|?)})? ?[?(.?)]? ?[=] ?() ?({[0-9,]+})?([^]?)(\n\n|^\n)
checkbox -> [\?] ?[([0-9a-z_].?)]({(?:[^{}]|?)})? ?[?(.?)]? ?[=] ?[] ?({[0-9,]+})?([^]?)(\n\n|^\n),
similar to all inputs, my question how can i get the paragraph line text (those are not start with ?[] which may have small/caps/digits include)
You can do it like this:
^(?!(\?)|(\[)).+(\n|$)
^ will get you the start of the line, (?! will look ahead for the ? or [ characters, .+ will match the rest of the characters until \n (Line break) or $ (end of file).
EDIT
To group all the lines from a paragraph, try this:
^((?!(\?)|(\[))(.+(\n|$)))+
here are some key ideas when handling string line detection.
\n. it's sometimes \r or \r\n)^ does not tell the start of the line. it tells the start of entire string.use plain .split(). + regex works well in this case. here's a good example that I've found on SO.
https://stackoverflow.com/questions/21895233/how-to-split-string-with-newline-n-in-node
function splitLines(t) { return t.split(/\r\n|\r|\n/); }
const lines = splitLines(yourString).forEach(line => radioOrCheckBoxRegex(line));
Sorry to deviate from regex but I advise you not to implement markdown by scratch. You'll have endless extreme cases. Because,
Implementing custom markdown it via classic markdown libs such as marked.js might be a better idea. most markdown libs uses internal tokenizer, which handles the regex you've mentioned. a plain text becomes program recognizable data(json, javascript obj) with tokenizers. it is possible to just use internal tokenizers, separate from the actual renderer.
check this lexer(tokenizer) code of marked.js