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

时间:2017-12-10 20:33:17

标签: javascript arrays extjs extjs5

要在数组的dispayfield中创建一个列表,我使用以下代码将数组项从逗号分隔开来,':

'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
 }
}

返回类似的内容:

. fragrance one
. fragrance two
. fragrance seven

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

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

返回

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

代替

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

任何想法如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

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

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

因此regex将匹配:

  • 单个qute,( /&#34; 部分)。
  • 零空格或更多(&#39; {0,}&#39; 部分)。
  • 单个逗号(&#39;,&#39; 部分)。
  • 零空格或更多(&#39; {0,}&#39; 部分)。
  • 单个qute,(&#34; / 部分)。

但是,如果您尝试按数组中的值构建列表(即使它是一个包含一个元素的数组),那么正确的方法是使用map函数执行此操作:

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

es6语法

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

答案 1 :(得分:0)

>var frag= (fragrance_list.indexOf(' "," ') > -1)?fragrance_list.split('","'):fragrance_list;

for first&amp;最后:

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