循环getJson结果

时间:2016-08-30 11:59:14

标签: javascript jquery json

我无法循环返回返回的JSON结果。如果结果符合某些要求,则将它们附加到[text][text2][text3]bla,blabla, blabla元素。是的我还在学习:)。

返回的结果如下<li>。 我只想抓住括号之间的元素。之后,需要删除这些括号,并将清理后的结果放在 $.getJSON('some-url?format=json', function(e) { var keywords = e.shop.keywords; //result = [text][text2][text3]bla,blabla, blabla $(keywords).each(function(i, keys) { var keys = keywords.match(/\[(.*?)\]/); //matches if text is between brackets if (keys) { var submatch = keys[1]; } }); $('.some-div ul').html('<li>'+submatch+'</li>'); }); 元素中。

所以我拥有的是:

Error: Syntax error, unrecognized expression: [text][text2][text3]

像上面这样做会给我一个错误{{1}}

我做错了什么?

2 个答案:

答案 0 :(得分:2)

假设e.shop.keywords是您希望执行正则表达式的字符串,只需使用JavaScript的正则表达式String#match函数并使用Array#forEach循环结果:

$.getJSON('some-url?format=json', function(e) {
  // if e.shop.keywords is string "[text][text2][text3]bla,blabla, blabla"
  // perform a regex match on the string...  and loop over using forEach
  var result = e.shop.keywords.match(/\[([^\]]+)\]/g);
  if( result ) {
    result.forEach(function(text){
      // since we're dealing with the entire match rather than match group 1
      // we'll want to chop off the first "[" and last char "]" via substring
      $('.some-div ul').append('<li>'+text.substring(1,text.length-1)+'</li>');
      // also: use append rather than html to avoid overwriting previous li elements
    });
  }
});

以上将输出:

<li>text</li>
<li>text2</li>
<li>text3</li>

您可以独立于AJAX调用进行测试:

"[text][text2][text3]bla,blabla, blabla".match(/\[([^\]]+)\]/g).forEach(function(text){
  console.log('<li>'+text.substring(1,text.length-1)+'</li>');
});

答案 1 :(得分:1)

您正在尝试在字符串上使用选择器:$(keywords)。这肯定不是你想要做的。我可以看到这里的混乱,看起来好像你期望keywords成为一个数组,而不是。

相反,您应该在通过.match()引用的字符串上使用正则表达式var keywords = e.shop.keywords;。然后,您应该像这样对“匹配数组”进行交互:

$.getJSON('some-url?format=json', function(e) {

    var keywords = e.shop.keywords; //result = [text][text2][text3]bla,blabla, blabla
    var keys = keywords.match(/\[(.*?)\]/); //matches if text is between brackets

    $.each(keys, function(index, value) {
       //Here, index is the index of the array keys
       //value is the matched string.
       $('.some-div ul').append('<li>'+value+'</li>');
    });
});