我有一个基本的模板类,用数据替换占位符,但是如果占位符没有被替换,我用空字符串替换它。
我遇到了包含jQuery的模板的问题。它将一些jquery语句看作占位符并删除它们使javascript无效。
目前,这是我用来删除未被替换的占位符:
preg_replace("/\\$[^\"' \|\[]+?;/", "", $tmp);
它成功地将此$get.q.htmlentities();
替换为空字符串(这很好),但对于如下所示的javascript,它会删除等号后的所有内容。
var val = $(this).val();
var me = $(this);
我认为最好的解决方案是忽略括号之间有值的任何内容,但我不知道如何将其添加到我当前的preg_replace
语句中。我该怎么做才能添加这个,或者我能做些什么更好的事情?
占位符格式
占位符有几种格式:
$
开头,以;
a-zA-Z0-9
,.
,_
,(
和)
$
和;
(
$
有效示例(替换为空字符串):
$placeholder;
$get.q.htmlentities().json_encode();
无效的例子(不管它):
$(this).placeholder();
$()placeholder;
$10.00 per/hr;
答案 0 :(得分:2)
正如评论中所述,这是一种解决方法:
(?<!=|= )\$[^\"' \|\[]+?;
:我们添加了(?<!=|= )
以防止=
或={space}
后面的匹配。
的 Online demo 强>
上面的正则表达式并不是那么好,因为如果有更多的空格会失败。所以这是一个全新的方法:
\$[^\(\);]+(?:\(\))?(?:\.[^\(\)]+(?:\(\))?)*?;
<强> Explanation 强>
<强> Online demo 强>