2

我有一个用数据替换占位符的基本模板类,但是如果没有替换占位符,我将其替换为空字符串。

我在使用包含 jQuery 的模板时遇到问题。它将一些 jquery 语句视为占位符并删除它们使 javascript 无效。

目前,这是我用来删除以前未替换的占位符的方法:

preg_replace("/\\$[^\"' \|\[]+?;/", "", $tmp);

它成功地$get.q.htmlentities();用一个空字符串替换了它(这很好),但是对于像下面这样的 javascript,它会删除等号之后的所有内容。

var val = $(this).val();
var me = $(this);

我认为最好的解决方案是忽略括号之间具有值的任何内容,但我不确定如何将其添加到我当前的preg_replace陈述中。我可以做些什么来添加这个,或者我可以做些什么更好?

占位符格式

占位符有几种格式:

  • 以 a 开头,以 a$结尾;
  • 占位符只能包含a-zA-Z0-9, ., _,()
  • $和之间不能包含空格;
  • A(可能不会出现在$
  • 括号之间不能有任何内容

有效示例(替换为空字符串):

$placeholder;
$get.q.htmlentities().json_encode();

无效的例子(别管它):

$(this).placeholder();
$()placeholder;
$10.00 per/hr;
4

1 回答 1

2

正如评论中所述,这里有一个解决方法
(?<!=|= )\$[^\"' \|\[]+?;::我们添加(?<!=|= )以防止匹配后面跟着=or ={space}
在线演示

上面的正则表达式当然不是那么好,因为如果有更多的空格它就会失败。所以这是一种全新的方法:
\$[^\(\);]+(?:\(\))?(?:\.[^\(\)]+(?:\(\))?)*?;

解释

在线演示

于 2013-05-28T21:02:09.673 回答