我正在尝试为两个 Markdown 解析器实现中心对齐:
- 在 PHP 中用于解析(成功(
- In JavaScript for Bootstrap Markdown(没有成功(
我遵循并找到最简单的想法是使用最终的 HTML 输出,只需将内联样式捕捉到标签上。
以下正则表达式满足了我的需要,它根据需要向到目前为止的任何元素*添加了style="text-align:center;"
:
$text = preg_replace('/'<(.*?)'>'->(.*?)<'-'<'/(.*?)'>/', '<$1 style="text-align:center;">$2</$3>', $text);
也就是说,<p>text</p>
变得<p style="text-align:center;">text</p>
.
但是,当我尝试将其移植到 JavaScript 中以使其也可用于客户端预览时,该模式不匹配:
content = content.replace('/'<(.*?)'>'->(.*?)<'-'<'/(.*?)'>/', '<$1 style="text-align:center;">$2</$3>');
不会在content
中进行更换。
我知道PHP和JavaScript的正则表达式之间略有不同,但是我已经找到了双方所有预期行为的示例,并且都在工作。
*如果有人想知道,我也成功地将中心对齐方式添加到已经具有样式属性的标签中 - 到目前为止,仅在服务器端。
你需要在 JavaScript 中使用正则表达式的文字语法,如下所示:
content = content.replace(/'<(.*?)'>'->(.+)<'-'<'/(.+)'>/gi, '<$1 style="text-align:center;">$2</$3>');
请注意,正则表达式末尾的gi
仅启用全局搜索(即替换与模式匹配的所有匹配项(和不区分大小写的匹配。它们在技术上都是可选的,但您很可能希望启用 g
标志。但是,保留i
标志取决于您(例如,取决于您的内容是否包含>
(。