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

时间:2014-12-11 21:47:35

标签: javascript php html regex

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

  1. PHP Parsedown(已成功)
  2. Bootstrap Markdown JavaScript (未成功)
  3. 我关注并发现最简单的想法是使用最终的HTML输出,只需将内嵌样式捕捉到标记上。

    以下正则表达式可以满足我的需要,它会根据需要将<{1}}添加到任何元素*中:

    style="text-align:center;"

    也就是说,$text = preg_replace('/\<(.*?)\>\-&gt;(.*?)&lt;\-\<\/(.*?)\>/', '<$1 style="text-align:center;">$2</$3>', $text); 变为<p>text</p>

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

    <p style="text-align:center;">text</p>

    content = content.replace('/\<(.*?)\>\-&gt;(.*?)&lt;\-\<\/(.*?)\>/', '<$1 style="text-align:center;">$2</$3>'); 中的替换不会发生。

    我知道PHP和JavaScript的Regex之间存在细微差别,但我已经找到了双方所有预期行为的示例,正​​在运作。


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

1 个答案:

答案 0 :(得分:1)

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

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

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