繁体   English   中英

基于重复的字符串拆分

[英]String split based on repetitions

我有一个字符串值( "11112233" )。 我想拆分这个字符串并将其分成3个不同的值。

Val 1 = 1111
val 2 = 22    
val 3 = 33

我搜索了很多,可能使用( / )或其他符号等字符。 还有别的,我的号码总是不同的,所以我不能通过输入确切的字符串来拆分它。 我想做这样的事情:

var myVal = "11112233";
var lastVal = myVal.split(0 , 3); // split from index 0 till index 3

我怎么能这样做?
谢谢

试试这个正则表达式:

'121112233'.match(/(\d)\1*/g) // ["1", "2", "111", "22", "33"]

\\1*表示“与之前的匹配相同,零次或多次”。

试试这样吧

myVal='11112233'
myVal.match(/(\d)\1+/g); //["1111", "22", "33"]

您可以使用object来解决此问题。

var str = '11112233';

var strObj = {};

for(var i = 0; i < str.length; i++){
     if(strObj[str[i]]) {
         strObj[str[i]]+=str[i];
     } else {
        strObj[str[i]] = str[i];
     }
}

for (var key in strObj) {
  if (strObj.hasOwnProperty(key)) {
    alert(key + " -> " + strObj[key]);
  }
}

JsFiddle: https ://jsfiddle.net/nikdtu/7qj3szo2/

substr()函数。

您可以像在问题中一样使用它:

var myVal = "11112233";
var lastVal = myVal.substr(0, 3); // "1111"

为了补充上面的答案,这里的解决方案不使用正则表达式。

function partition(acc, value){

  var last = acc[acc.length-1];
  if(last && last[0] == value) acc[acc.length-1] += value;
  else acc = acc.concat(value);

  return acc;
}

var toInt = parseInt.bind(null, 10)

var x = ([[]]).concat("112233".split(''))
              .reduce(partition).map(toInt);

// [11, 22, 33]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM