Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中从字符串中提取值?_Javascript_Jquery_String_Cookies - Fatal编程技术网

如何在javascript中从字符串中提取值?

如何在javascript中从字符串中提取值?,javascript,jquery,string,cookies,Javascript,Jquery,String,Cookies,我需要一些关于使用javascript从cookie中提取值的帮助 cookie中的字符串如下所示: string = 'id=1||price=500||name=Item name||shipping=0||quantity=2++id=2||price=1500||name=Some other name||shipping=10||quantity=2' 通过使用string.split()和string.replace()以及一些难看的代码,我设法获得了所需的值(价格、名称、发货、数

我需要一些关于使用javascript从cookie中提取值的帮助

cookie中的字符串如下所示:

string = 'id=1||price=500||name=Item name||shipping=0||quantity=2++id=2||price=1500||name=Some other name||shipping=10||quantity=2'
通过使用string.split()和string.replace()以及一些难看的代码,我设法获得了所需的值(价格、名称、发货、数量)。但问题是,有时cookie中的字符串并不都相同。有时,饼干上的刺痛会像这样:

   string = 'id=c1||color=red||size=XL||price=500||name=Item name||shipping=0||quantity=2++id=c1||price=500||name=Item name||shipping=0||quantity=2'
有些项目以颜色和大小为参数,有时仅其中一项

是否有更有效的方法向我的计算机解释,我希望“price=”后面的字符串部分是一个名为“price”的变量,等等

我希望我说得有道理,我已经尽可能地精确了

不管怎样,谢谢你的帮助


编辑:我只是想感谢StackOverflow所有伟大的人,他们提出了如此奇妙的想法。因为你所有的好建议,我今晚要出去喝酒。谢谢大家:)

如果您可以将
|
替换为
&
,您可以尝试。
个人备忘—JSON格式的数据更容易处理。

我会将数据附加到javascript对象

  var settingsObj = {};
  var components = thatString.split('||');

  for(var j = 0; j < components.length; j++)
  {
       var keyValue = components[j].split('=');

       settingsObj[keyValue[0]] = keyValue[1];
  }

  // Now the key value pairs have been set, you can simply request them

  var id = settingsObj.id; // 1 or c1
  var name = settingsObj.name; // Item Name, etc
var settingsObj={};
var components=thatString.split(“| |”);
对于(var j=0;j
您已经在使用.split()将字符串分解为| |只需再进一步,将每个部分拆分为=并将左侧的所有内容分配给字段,将右侧的值分配给字符串中的第一个匹配项

string.match(/price=(\d{1,})/)[1]
注意,这将只匹配字符串中的第一个price=,而不是第二个price=。

让我们编写一个解析器

function parse(input)
{
    function parseSingle(input)
    {
        var parts = input.split('||'),
            part,
            record = {};

        for (var i=0; i<parts.length; i++)
        {
            part = parts[i].split('=');
            record[part[0]] = part[1];
        }

        return record;
    }

    var parts = input.split('++'),
        records = [];

    for (var i=0; i<parts.length; i++)
    {
        records.push(parseSingle(parts[i]));
    }

    return records;
}
试试看:

var string = 'id=1||price=500||name=Item name||shipping=0||quantity=2++id=2||price=1500||name=Some other name||shipping=10||quantity=2';
var obj = new Array();
var arr = string.split('||');
for(var x=0; x<arr.length;x++){
    var temp = arr[x].split('=');
    obj[temp[0]] = temp[1]
}

alert(obj['id']); // alert 1
var string='id=1 | | price=500 | | | name=Item name | | | shipping=0 | | quantity=2++id=2 | | price=1500 | | name=其他名称| | shipping=10 | | | | quantity=2';
var obj=新数组();
var arr=string.split(“| |”);

对于(var x=0;x您可以使用正则表达式实现这一点。例如,正则表达式
/price=([0-9]+)/
将匹配
price=XXX
,其中XXX是一个或多个数字。由于正则表达式的这一部分由括号包围,因此它显式地为您捕获数字部分

var string='id=1 | | price=500 | | | name=Item name | | | shipping=0 | | quantity=2++id=2 | | price=1500 | | name=其他名称| | shipping=10 | | | |数量=2'
var pricelegex=/price=([0-9]+)/
var match=string.match(pricelegex);
console.log(match[1]);//将500写入控制台日志中
var items=str.split(“+”);

对于(var i=0;i,如果您可以使用jQuery,它将打包处理cookie,并允许您访问它们,如:

阅读cookie: var comments=$.cookie('comments')

编写cookie: $.cookie('注释','扩展')

其他人的这篇文章有一个很好的例子:


如果无法使用jQuery,则需要像当前一样进行标准字符串解析(可能是正则表达式而不是字符串拆分/替换可能会精简代码),或者找到其他可以使用的javascript库。

首先,使用
++
分隔符将字符串拆分为两个(或更多)部分:

var strings = myString.split('++');
然后,对于每个字符串,您需要一个对象,对吗?所以您需要有一个数组,并按如下方式填充它:

var objects = [];

for (var i = 0; i < strings.length; ++i) {
    var properties = strings[i].split('||');
    var obj = {};
    for (var j = 0; j < properties.length; ++j) {
          var prop = properties[j].split('=');
          obj[prop[0]] = prop[1]; //here you add property to your object, no matter what its name is
    }
    objects.push(obj);
}
var对象=[];
对于(变量i=0;i

因此,您有一个由字符串构造的所有对象的数组。当然,在现实生活中,我会添加一些检查,以确保字符串确实满足格式等要求。但我希望想法很清楚。

您可以这样做,在拆分字符串时对其求值

<html>
<head>
<script type="text/javascript">
var string = 'id=c1||color=red||size=XL||price=500||name=Item name||shipping=0||quantity=2++id=c1||price=500||name=Item name||shipping=0||quantity=2'


var mySplitResult = string.split("||");

for(i = 0; i < mySplitResult.length; i++){
    document.write("<br /> Element " + i + " = " + mySplitResult[i]); 
    var assignment = mySplitResult[i].split("=");

    eval(assignment[0] + "=" + "\""+assignment[1]+"\"");
}
document.write("Price : " + price);
</script>
</head>
<body>
</body>
</html>

变量字符串='id=c1 | | color=red | | size=XL | | price=500 | | name=Item name | | shipping=0 | | quantity=2++id=c1 | | price=500 | | name=Item name | | shipping=0 | | quantity=2'
var mySplitResult=string.split(“| |”);
对于(i=0;i元素”+i+“=”+mySplitResult[i]);
var assignment=mySplitResult[i]。拆分(“”);
评估(赋值[0]+“=”+“\”+赋值[1]+“\”);
}
文件。填写(“价格:”+价格);

如果您喜欢代码中的眼霜,您可以使用John Resig()的基于regexp的“搜索且不替换”技巧:

然后


将字符串转换为JSON格式,然后对其进行分析。

您是否忽略了这样一个事实,即那里有两条记录,由
++
@Jamiec和@Michael分隔。谢谢,我忽略了
++
应该分隔两条记录。现在编辑。@Jamiec@Michael修复。再次感谢
:)
如果您需要肾脏或其他东西,请给我打个电话,我会看看我能做些什么:),非常感谢。我想大多数人都忽略了一个事实,即您的字符串中有两条记录由
++
分隔。你是怎么处理的?你只想要第一个价格/名字/等等吗?或者两者兼而有之?我同意,但这正是问题所要求的看错6@mblase-真的吗?OP在哪里要求涉及
eval
的解决方案?这里没有人“构建关联数组”,我们正在构建对象。令人惊讶的是,JS中的所有对象都是键/值对(关联数组)。所有的东西,我说。我们在术语上争论不休。它像关联数组一样行走,像关联数组一样嘎嘎作响,所以我称它为associ
var objects = [];

for (var i = 0; i < strings.length; ++i) {
    var properties = strings[i].split('||');
    var obj = {};
    for (var j = 0; j < properties.length; ++j) {
          var prop = properties[j].split('=');
          obj[prop[0]] = prop[1]; //here you add property to your object, no matter what its name is
    }
    objects.push(obj);
}
<html>
<head>
<script type="text/javascript">
var string = 'id=c1||color=red||size=XL||price=500||name=Item name||shipping=0||quantity=2++id=c1||price=500||name=Item name||shipping=0||quantity=2'


var mySplitResult = string.split("||");

for(i = 0; i < mySplitResult.length; i++){
    document.write("<br /> Element " + i + " = " + mySplitResult[i]); 
    var assignment = mySplitResult[i].split("=");

    eval(assignment[0] + "=" + "\""+assignment[1]+"\"");
}
document.write("Price : " + price);
</script>
</head>
<body>
</body>
</html>
var extract = function(string) {
    var o = {};

    string.replace(/(.*?)=(.*?)(?:\|\||$)/g, function(all, key, value) {
        o[key] = value;
    });

    return o;
};
var objects = string.split('++'), 
    i = objects.length;

for (;i--;) {
    objects[i] = extract(objects[i]);
}
JSON.parse('[{' + string.replace(/\+\+/g, '},{').replace(/(\w*)=([\w\s]*)/g, '"$1":"$2"').replace(/\|\|/g, ',') + '}]')