正则表达式替换为多个通配符在 PHP 中工作,而不是在 JavaScript 中


Regex replace with multiple wildcards works in PHP, not in JavaScript

我正在尝试为两个 Markdown 解析器实现中心对齐:

  1. PHP 中用于解析(成功(
  2. In JavaScript for Bootstrap Markdown(没有成功(

我遵循并找到最简单的想法是使用最终的 HTML 输出,只需将内联样式捕捉到标签上。

以下正则表达式满足了我的需要,它根据需要向到目前为止的任何元素*添加了style="text-align:center;"

$text = preg_replace('/'<(.*?)'>'-&gt;(.*?)&lt;'-'<'/(.*?)'>/', '<$1 style="text-align:center;">$2</$3>', $text);

也就是说,<p>text</p>变得<p style="text-align:center;">text</p>.

但是,当我尝试将其移植到 JavaScript 中以使其也可用于客户端预览时,该模式不匹配:

content = content.replace('/'<(.*?)'>'-&gt;(.*?)&lt;'-'<'/(.*?)'>/', '<$1 style="text-align:center;">$2</$3>');
不会

content中进行更换。

我知道PHP和JavaScript的正则表达式之间略有不同,但是我已经找到了双方所有预期行为的示例,并且都在工作。


*如果有人想知道,我也成功地将中心对齐方式添加到已经具有样式属性的标签中 - 到目前为止,仅在服务器端。

你需要在 JavaScript 中使用正则表达式的文字语法,如下所示:

content = content.replace(/'<(.*?)'>'-&gt;(.+)&lt;'-'<'/(.+)'>/gi, '<$1 style="text-align:center;">$2</$3>');

请注意,正则表达式末尾的gi仅启用全局搜索(即替换与模式匹配的所有匹配项(和不区分大小写的匹配。它们在技术上都是可选的,但您很可能希望启用 g 标志。但是,保留i标志取决于您(例如,取决于您的内容是否包含&GT;(。