【发布时间】:2012-10-28 17:22:04
【问题描述】:
我正在尝试从我的 JS 函数数组中删除一个 JS 函数,但我找不到正确的正则表达式。
这是我要删除的文本(函数):
window.addEvent('domready', function() {
SqueezeBox.initialize({});
SqueezeBox.assign($$('a.modal'), {
parse: 'rel'
});
});
我写了这段代码来删除它:
<?php if (isset($this->functions['text/javascript'])) {
$this->functions['text/javascript'] = preg_replace('%window\.addEvent\(\'domready\',\s*function\\(\\)\s*\\{SqueezeBox\\.initialize\\(\\{\\}\\);\s*SqueezeBox\\.assign\\(\\$\\$\\(\'a\\.modal\'\\), \\{parse: \'rel\'\\}\\);\\}\\);\s*%', '', $this->functions['text/javascript']);
if(empty($this->functions['text/javascript'])) {
unset($this->functions['text/javascript']);
}
} ?>
我的正则表达式不太好,所以我迷路了,不知道在哪里寻找模式中的错误。
【问题讨论】:
-
你应该更稀疏地匹配它。使用
.*?并在其中查找SqueezeBox而不是断言整个函数体。例如,您在parse:之前忘记了\s*。可能需要更多这些。 (不过,在逃跑方面做得很好。) -
如果您删除 preg_replace 并只给出 "" 怎么办? - 对不起,我的问题很可悲。
-
一个问题是,如果您希望
*匹配换行符,则需要使用s (PCRE_DOTALL)flag。 -
@EliasVanOotegem 我想你的意思是
s。m (PCRE_MULTILINE)标志仅更改^行首和$行尾元字符的行为。请参阅我之前评论中的链接:“如果在模式中……没有出现^或$,则设置此修饰符无效。” -
@user113215:是的,我的意思是
s标志,评论已删除