当数组中的一项是带逗号的字符串时,将数组拆分为字符串列表

Split array to string list when one of the items in the array is a string with commas

要从数组在显示字段中创建列表,我使用以下代码将数组项从逗号“,”中拆分出来:

'fragrance_list': ["fragrance one" , "fragrance two", "fragrance seven"; 

 xtype: 'displayfield',
 name: 'fragrance_list',
 bind: '{record.fragrance_list}',
 renderer: function (value, field) {
 if (value && value.indexOf(',') > -1) {
    this.rndTpl = this.rndTpl || new Ext.XTemplate('<div style = "line-
 height: 150%;' +
        'margin-left: -25px; margin-top: -12px; padding-left: 5px; padding-
 right: 5px;">' +
        '<ul><li>{[values.fragrance_list.replace(/,/g, "<li/>")]}</li></ul>' 
         +
        '</div>');

   return this.rndTpl.apply({
      fragrance_list: value
   });

 } else {
    return '&nbsp' + value
 }
}

return 类似于:

. fragrance one
. fragrance two
. fragrance seven

问题是当数组项之一可能位于数组的不确定位置时,其字符串中有一个或多个逗号:

'fragrance_list': ["fragrance one" , "fragrance two", "fragrance A, n.º 5", "fragrance 7"; 

return

. fragrance one
. fragrance two
. fragrance A
. n.º 5
. fragrance 7

改为

. fragrance one
. fragrance two
. fragrance, n.º 5
. fragrance 7

有什么解决办法吗?

我不完全确定你的代码结构,但如果你想剪切的是一个长字符串,你可以将引号本身添加到 regex:

 '<ul><li>{[values.fragrance_list.replace(/" {0,}, {0,}"/g, "<li/>")]}</li></ul>'

因此 regex 将匹配:

  • 单句,(/部分)。
  • 零个或更多空格(' {0,}' 部分)。
  • 单逗号(',' 部分)。
  • 零个或更多空格(' {0,}' 部分)。
  • 单句,("/ 部分)。

但是,如果您尝试通过数组中的值构建列表(即使它是一个只有一个元素的数组),那么正确的方法是使用 map 函数:

arrOfData.map( function(dataUnit){
    renderString += "<li>" + dataUnit + "</li>";
});

es6语法

arrOfData.map( dataUnit => renderString += `<li>${dataUnit}</li>`);
>var frag= (fragrance_list.indexOf(' "," ') > -1)?fragrance_list.split('","'):fragrance_list;

第一个和最后一个:

 firstfrag=frag[0].split(' " ')[1];
 lastfrag=frag[frag.length-1].split(' " ')[0];