JavaScript Regular Expression查找PHP标记

时间:2011-06-26 15:52:51

标签: javascript regex

我已经google了一个正则表达式来抓取并阅读了一些教程,我似乎无法得到一个可靠的正则表达式来执行此操作。

我需要做的是编写一个与字符串中的PHP标记匹配的JavaScript正则表达式。

我继承了一个大型的php项目,其中混合了html和php的视图不是很易读。所以我正在做的是编写一个IDE扩展,供我个人使用,以删除在php视图中混合的php,以便在其上运行HTML缩进脚本,而不会混淆HTML缩进脚本。然后在缩进脚本完成后我回去重新插入php。

到目前为止我所拥有的是(我从一个寻找括号[]的正则表达式中转换了这个,我知道它不会匹配所有内容,但它让我远远超出了我的IDE扩展程序):

var php_tag_pattern = /<\?[^<>]*\?>/;

现在由于显而易见的原因,它不匹配代码如下:

<?=$common->format_number($acct_info['number'])?>

或者这个:

<?
$wifi = $wifi_lib->wifi_radius($v['radiusgroupname']);
if (!empty($wifi)) :?>

过去几个小时我一直在搞乱这个问题,所以我想我最终会寻求帮助,看看我错过了什么。

谢谢!

3 个答案:

答案 0 :(得分:5)

要匹配多行php文本,您需要在Javascript中实现DOTALL。不幸的是,Javascript没有s标志,但有一种解决方法。试试这段代码:

var php_tag_pattern = /<\?[=|php]?[\s\S]*?\?>/;

[\s\S]将确保在多行中匹配php文本,包括新行。

答案 1 :(得分:0)

var php_tag_pattern = /<\?=?.+?\?>/;

答案 2 :(得分:0)

var regex = /<\?[=|php]?[^<>]*\?>/;

您还需要使用多线修改器new RegExp(regex, "gim")。 'g'是全局的,'i'不区分大小写,'m'是多行的。