如果已经包含逗号,如何拆分js字符串?

时间:2015-12-18 05:15:54

标签: javascript php regex

我在js文件中用逗号分割值时遇到问题。在我的index.php文件中,我从数据库获取名称并使用json_encode()返回这样的数据,

<?php
$sql = "select id,name from my_table where id='$id'";
    $query = mysql_db_query($dbname,$sql);
    while($row = mysql_fetch_array($query)){
        $id = $row['id'];
        $name = $row['name'];
        $arr['id'][] = $id;
        $arr['name'][] = '"'$ans.'"';
    }
echo json_encode($arr);
?>

在我的js文件中,我使用JSON.parse获取此值。这是我的js文件。

var xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            var arr = JSON.parse(xmlhttp.responseText);
            extract(arr);
            var name_var = name.toString().split(',');
            alert(name_var);
            }
        };     
    }
    xmlhttp.open("GET","http://myurl/index.php?t="+Math.random(),true);
    xmlhttp.setRequestHeader( "Pragma", "no-cache" );
    xmlhttp.setRequestHeader( "Cache-Control", "no-cache" );
    xmlhttp.send(); 

function extract(variable) {
    for (var key in variable) {
        window[key] = variable[key];
    }
}

如果响应数据没有像这样的逗号

,这个js就可以了
"name one","name two","name three","name four"

但是如果响应数据有逗号("name one","name two,five","name three,six","name four"),我就会遇到问题,它会分成

"name one""name twofive""name threesix""name four"

对我来说问题。我想把它改成这样的

"name one""name two,five""name three,six""name four"

我还想从所有字符串中删除双引号。

我已经花了很多时间来解决这个问题。但是没有用。我非常感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

您可以添加方括号并使用JSON解析器来执行此操作:

var s = '"name one", "name two , five" , "name three , six" , "name four"';

var arr = JSON.parse('[' + s + ']');

console.log(arr[0]); // name one
console.log(arr[2]); // name three , six

答案 1 :(得分:2)

以正确格式获取响应的正确方法是从服务器以相同格式发送响应。

尝试将$arr['name'][] = '"'$ans.'"';更改为$arr['name'][] = $ans;,以便将所有字符串添加到数组中而不添加额外的引号,并在客户端获取响应时使用JSON.parse(response)来获取JSON对象来自字符串表示。

如果无法更改响应格式第三方API或任何其他原因),则可以使用JavaScript字符串方法。

您可以使用String#substring删除多余的引号,String#split可以使用逗号分隔字符串,而不是在引号内。

  1. str.substring(1, str.length - 1):从字符串中删除第一个和最后一个字符,从而删除第一个和最后一个引号
  2. .split(/"\s*,\s*"/):按"分隔字符串,后跟任意数量的空格,然后是,,然后是任意数量的空格,然后引用。按","分隔",之间的任意数量的空格。
  3. var str = '"name one" , "name two,five", "name three,six" , "name four"';
    var arr = str.substring(1, str.length - 1).split(/"\s*,\s*"/);
    
    console.log(arr);
    document.write('<pre>' + JSON.stringify(arr, 0, 4) + '</pre>');;