从引号除外的任何地方删除空格

时间:2014-06-06 06:52:40

标签: javascript php regex preg-replace

我在'/\s+/'中使用preg_replace切换来删除Javascript代码中的所有空格,我在PHP数组中传递:

preg_replace('/\s+/', '',
("
    function(uploader)
    {
        if(uploader.files.length > 1)
        {
            uploader.files.splice(1, uploader.files.length);

            apprise('You can not update more than one file at once!', {});
        }
    }
"))

这是一个非常基本的Javascript缩小。在PHP文件(源代码)中,我可以拥有完全可读的功能代码,而在浏览器中,它的页面主体最终就像单行字符串一样:

function(uploader,files){console.log('[PluploadUploadComplete]');console.log(files);},'QueueChanged':function(uploader){if(uploader.files.length>1){uploader.files.splice(1,uploader.files.length);apprise('Youcannotupdatemorethanonefileatonce!',{});}}

正如您所见(或期望),这确实会影响引号中的字符串并生成不带空格的消息(例如:Youcannotupdatemorethanonefileatonce!)。

这个问题有解决方法吗?我可以从字符串中的所有地方删除所有空格,除了嵌入单引号的部分吗?

2 个答案:

答案 0 :(得分:3)

要匹配除单引号之外的空格字符,请使用:

$regex = "~'[^']*'(*SKIP)(*F)|\s+~";

您可以直接将其弹出preg_replace()

例如:$replaced = preg_replace($regex,"",$input);

选项2:多种行情

如果您有单引号或双引号,请使用:

$regex = "~(['"]).*?\1(*SKIP)(*F)|\s+~";

这是如何工作的?

|替换的左侧,我们匹配完整"quoted strings",然后故意失败,并跳到字符串中的下一个位置。在右侧,我们匹配任何空格,我们知道它是正确的空格,因为它与左侧的表达式不匹配。

参考

How to match (or replace) a pattern except in situations s1, s2, s3...

答案 1 :(得分:2)

您可以简单地捕获单引号字符串并在替换中引用它。请注意,这仅适用于单引号字符串的简单情况,而不是嵌套...

$code = preg_replace("/('[^']*')|\s+/", '$1', $code);