【问题标题】:Regex to remove extra spaces in a string in JS format正则表达式删除 JS 格式字符串中的多余空格
【发布时间】:2013-10-02 21:13:54
【问题描述】:

我有以下字符串。

$json = '
    insert: [
        { table:" abc",values:{id:1,text:" lorem ipsum "} },
        {   table  :  "cde "  ,  values   :   { id  : 2  , firstname  :  "lorem ipsum   dolor sit    " } } 
    ]
    ';

已经尝试使用下面的正则表达式,但结果不是预期的。

$json = preg_replace('~\s{1,}~', '', $json);

我喜欢下面的回报

 {"insert": [{"table": "abc", "values": {"id": 1, "text": "lorem ipsum"}}, {"table": "cde", "values": {"id": 2, "text": "lorem ipsum dolor sit"}}]}

然后使用 json_decode()

我希望我已经清楚了

更新:

我有以下字符串。

示例:

$json_string = '
    insert: [
        { table:" abc",values:{id:1,text:" lorem ipsum "} },
        {   "  table  "  :  "cde "  ,  "  values"   :   { id  : 2  , firstname  :  "lorem ipsum   dolor sit    " } } 
    ]
    ';

我想要以下输出

$json_replaced = '{"insert": [{"table": "abc", "values": {"id": 1, "text": "lorem ipsum"}}, {"table": "cde", "values": {"id": 2, "text": "lorem ipsum dolor sit"}}]}';

【问题讨论】:

  • 从哪里/如何获得$json 值?我想这可能是XY problem

标签: javascript php regex whitespace


【解决方案1】:

您不能只运行以下命令:

$json_string = preg_replace("/\s{2,}/", "", $json_string);

输出是:

insert: [{ table:" abc",values:{id:1,text:" lorem ipsum "} },{"table":"cde ","values":{ id: 2, firstname:"lorem ipsumdolor sit" } }]

【讨论】:

  • 如果你想清理引号之间的间距,也只需在上面运行一个正则表达式,这样代码就不会超过 2 行。
  • 我在 5 月份写了这个答案,今天我遇到了自己的问题 - 我的答案正确,当前标记的答案无效。
【解决方案2】:

以下内容应该适合您:

$json = '
    insert: [
        { table:" abc",values:{id:1,text:" lorem ipsum "} },
        {   table  :  "cde "  ,  values   :   { id  : 2  , firstname  :  "lorem ipsum   dolor sit    " } } 
    ]
';
$json = '{' . $json . '}';
$json = preg_replace(array('/ *\n */', '/(?<=[{,]) *([^\s:]+) *: */'),
                     array("", '"$1": '), $json);
echo $json; // converted json string
print_r(json_decode($json, true)); // decoded array

现场演示:http://ideone.com/wfxDYK

输出:

{"insert": [{"table": " abc","values": {"id": 1,"text": " lorem ipsum "} },{"table": "cde "  ,"values": {"id": 2  ,"firstname": "lorem ipsum   dolor sit    " } }]}

Array
(
    [insert] => Array
        (
            [0] => Array
                (
                    [table] =>  abc
                    [values] => Array
                        (
                            [id] => 1
                            [text] =>  lorem ipsum 
                        )

                )

            [1] => Array
                (
                    [table] => cde 
                    [values] => Array
                        (
                            [id] => 2
                            [firstname] => lorem ipsum   dolor sit    
                        )

                )

        )

)

【讨论】:

  • 从上面的输出中可以看出,它工作正常。但是如果你输入的 Json 和 post 不一样,我明天早上就可以调试了。
  • 我必须做出改进,但它对我有用。如果您能进一步改进正则表达式,我将不胜感激。
  • 很高兴知道它有效,请考虑将其标记为“已接受”,以便将来遇到类似问题的用户能够轻松看到它。
猜你喜欢
  • 1970-01-01
  • 2018-11-20
  • 2019-06-21
  • 2012-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-07
  • 2011-11-01
相关资源
最近更新 更多