【发布时间】:2021-05-10 08:24:51
【问题描述】:
我目前正在尝试将 wikitext 表格转换为 HTML。 (Parsoid 不是一个选项)
表格以以下格式编写。我想对代码进行正则表达式以提高速度,但我需要一种方法来捕获常用搜索词之间的文本。
{| class=\"wikitable\"
|-
|'''Ruler'''
|'''Stopwatch'''
|'''Magnifying Glass'''
|-
|[[File:Ruler30cmDiagonal.png|center|200px]]
|[[File:Stopwatch.png|center|200px]]
|[[File:MagnifyingGlass.png|center|200px]]
|-
|A ruler is a piece of '''equipment''' used to measure length.
|A scientist came '''equip''' with a [[stopwatch]].
|A magnifying glass is a useful piece of '''equipment''' for looking at very small things.
|}
从下面我需要匹配“|-”子字符串之间的文本并以“|}”结尾
所以比赛将是
|'''Ruler'''
|'''Stopwatch'''
|'''Magnifying Glass'''
和
|A ruler is a piece of '''equipment''' used to measure length.
|A scientist came '''equip''' with a [[stopwatch]].
|A magnifying glass is a useful piece of '''equipment''' for looking at very small things.
和
|[[File:Ruler30cmDiagonal.png|center|200px]]
|[[File:Stopwatch.png|center|200px]]
|[[File:MagnifyingGlass.png|center|200px]]
如您所见,缺少“|”会很复杂字符匹配需要通过字符对来完成。 (我还需要在以后的匹配/替换调用中通过 '\n|' 进行匹配)
在这上面花了好几个小时,我知道我需要进行前瞻和回溯(用 or 表示 |- 和 })。我认为/((?=(\|\-))[.]*)(?!(\|\-|\|\}))/mg 是最有可能的候选人,但并不高兴。
有什么建议吗?
【问题讨论】:
-
如果您尝试制作解析器,我始终建议不要直接使用正则表达式,在线有一些有用的工具可以指导和帮助您从基本语法实现简单的解析器,例如 PEG.js .尝试使用正则表达式解析所有内容是一项巨大而毫无价值的工作。如果幸运的话,wikitext 表是公共领域的对象,你可能会发现一些已经完成的实现
-
也许是
(?<=\|-\n).*?(?=\s*\|[-}])? regex101.com/r/uIvAN4/1
标签: javascript regex regex-lookarounds regex-greedy regexp-replace