Necesito encontrar la línea real del párrafo, el dibujo del párrafo por el editor de rebajas, puede agregar una casilla de verificación, radio, cuadro de texto y párrafo a través del editor.
El str real es algo como esto,
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¿Todos los tipos de preguntas tienen que comenzar con ?[sometext] , para que pueda usar esta expresión regular
radio -> [\?] ?[([0-9a-z_]. ?)]({(?:[^{}]|?) })? ?[?(. ?)]? ?[=] ?() ?({[0-9,]+})?([^] ?)(\n\n|^\n)
casilla de verificación -> [\?] ?[([0-9a-z_]. ?)]({(?:[^{}]|?) })? ?[?(. ?)]? ?[=] ?[] ?({[0-9,]+})?([^] ?)(\n\n|^\n),
similar a todas las entradas, mi pregunta, ¿cómo puedo obtener el texto de la línea de párrafo (esos no comienzan con? [] que pueden incluir letras pequeñas/mayúsculas/dígitos)
Puedes hacerlo así:
^(?!(\?)|(\[)).+(\n|$)^ le mostrará el comienzo de la línea, (?! buscará los caracteres ? o [, .+ coincidirá con el resto de los caracteres hasta \n (salto de línea) o $ (final del archivo).
demostración de expresiones regulares 101
EDITAR
Para agrupar todas las líneas de un párrafo, intente esto:
^((?!(\?)|(\[))(.+(\n|$)))+aquí hay algunas ideas clave al manejar la detección de líneas de hilo.
\n . A veces es \r o \r\n )^ no dice el comienzo de la línea. indica el comienzo de toda la cadena. use simple .split() . + regex funciona bien en este caso. aquí hay un buen ejemplo que he encontrado en 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));Lamento desviarme de las expresiones regulares, pero le aconsejo que no implemente Markdown desde cero . Tendrás un sinfín de casos extremos. Porque,
Implementar una reducción personalizada a través de librerías clásicas de reducción como marcado.js podría ser una mejor idea. la mayoría de las librerías de rebajas usan un tokenizador interno, que maneja la expresión regular que ha mencionado. un texto sin formato se convierte en datos reconocibles del programa (json, javascript obj) con tokenizadores. es posible usar tokenizadores internos, separados del renderizador real.
verifique este código lexer (tokenizer) de marcado.js