我需要从段落中找到实际的行,段落由Markdown编辑器绘制,你可以通过编辑器添加复选框、单选框、文本框和段落。
实际的字符串是这样的
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
所有的问题类型都必须以开头吗?[sometext],这样我就可以使用这个正则表达式了
单选-〉[\?]?[([0-9a-z_].?)]({(?:[^{}]|?)})??[?(.*?)]??[=]?()?({[0-9,]+})?([^]?)(\n\n|^\n)
复选框-〉[\?]?[([0-9a-z_].?)]({(?:[^{}]|?)})??[?(.*?)]??[=]?[]?({[0-9,]+})?([^]?)(\n\n|^\n),
与所有输入类似,我的问题是如何获得段落行文本(这些不是开头?[],其中可能包含小/大写/数字)
2条答案
按热度按时间9lowa7mx1#
你可以这样做:
^将显示行首,(?!将向前查找?或[字符,.+将匹配其余字符,直到\n(换行符)或$(文件结尾)。
regex101 demo
要将段落中的所有行分组,请尝试以下操作:
regex101 demo
kxkpmulp2#
以下是处理字符串检测时的一些关键思想。
\n
,有时候是\r
或\r\n
)^
不告诉行的开始。它告诉整个字符串的开始。使用普通的
.split()
。+ regex在这种情况下工作得很好。下面是我在SO上找到的一个很好的例子。降价难(危险)
对不起,偏离正则表达式,但我建议你不要实现零折扣。你会有无数的极端情况。因为
通过经典的markdown库(如marked.js)实现自定义markdown可能是一个更好的主意。大多数markdown库使用内部标记器,它处理你提到的正则表达式。一个纯文本通过标记器变成程序可识别的数据(json,javascript obj)。可以只使用内部标记器,与实际的呈现器分开。
检查marked.js的lexer(标记化器)代码