如何拆分具有小计前缀的字符串

How to split string with subtotal prefix

本文关键字:前缀 字符串 何拆分 拆分      更新时间:2023-09-26

我想拆分字符串

'something.somethingMore.evenMore[123].last'

['something',
'something.somethingMore',
'something.somethingMore.evenMore[123]',
'something.somethingMore.evenMore[123].last']

我想不出用分隔符"."分隔字符串的简单解决方案,但是具有字符串的先前内容。

现代JS编程风格类似

str                                             //take the input
    .split('.')                                 //and split it into array of segments,
    .map(                                       //which we map into a new array,
        function(segment, index, segments)      //where for each segment
            return segments.slice(0, index+1)   //we take the segments up to its index
                .join(".")                      //and put them back together with '.'
            ;
         }
    )

这利用了Array#map函数不仅传递当前值,还传递其索引和整个输入数组的优点。这使我们可以很容易地使用slice来获得一个数组,该数组包含截至当前分段的所有分段。

我不会称我的解决方案简单,而是:

function splitArrayIntoGoofyArray(val){
  var str =val.split("."), arr = [];
  for (var x = str.length; x >= 1; x--){
     var cnt = str.length - x;
     arr.push((cnt > 0) ? arr[cnt - 1] + "." + str[cnt] : str[cnt]);
  }
  return arr;
}
console.log(splitArrayIntoGoofyArray("aaa.bbb.ccc.ddd"));

http://jsfiddle.net/7tav4sue/

这取决于什么是简单的解决方案。最简单的方法是使用创建第一个阵列

var str = 'something.somethingMore.evenMore[123].last';
var arr = str.split('.');

然后用这个数据填充新的数组

var result = [];
for (var i = 0; i < arr.length; i++) {
    var item = [];
    for (var j = 0; j <= i; j++) {
        item.push(arr[j]);
    }
    result.push(item.join('.'))
}

您可以尝试匹配而不是拆分,

> var s = 'something.somethingMore.evenMore[123].last';
undefined
> var regex = /(?=(^((([^.]*)'.[^.]*)'.[^.]*)'.[^.]*))/g;
undefined
> regex.exec(s)
[ '',
  'something.somethingMore.evenMore[123].last',
  'something.somethingMore.evenMore[123]',
  'something.somethingMore',
  'something',
  index: 0,
  input: 'something.somethingMore.evenMore[123].last' ]

为了获得所需的输出,

> regex.exec(s).slice(1,5)
[ 'something.somethingMore.evenMore[123].last',
  'something.somethingMore.evenMore[123]',
  'something.somethingMore',
  'something' ]

我想您需要一个循环:

在查找"."字符时,在列表子字符串中返回,直到新的"."索引为止。使用找到的最后一个正确索引开始每次搜索。