在给定的索引上将字符串拆分为两个并返回两个部分


80

我有一个字符串,需要在给定的索引上拆分,然后返回两个部分,以逗号分隔。例如:

string: 8211 = 8,211
        98700 = 98,700

因此,我需要能够在任何给定的索引上拆分字符串,然后返回字符串的两半。内置方法似乎执行了拆分,但仅返回拆分的一部分。

string.slice仅返回提取的一部分字符串。string.split只允许您分割字符而不是索引string.substring满足我的需要,但仅返回子字符串string.substr非常相似-仍然仅返回子字符串


2
您可以显示预期的输出吗?
罗汉·库玛

2
split()毫无疑问,它返回一个字符串数组。请提供似乎不适用于您的代码。
Wim Ombelets 2013年

这不就是千位分隔符吗?
2013年

您真的要拆分还是只插入千位分隔符。如果这仅仅是后者,你可以试试这个:var n='1234567890'; alert(n.replace(/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g,'$&,'));。参考:safaribooksonline.com/library/view/regular-expressions-cookbook/…–
Manngo,

Answers:


105

试试这个

function split_at_index(value, index)
{
 return value.substring(0, index) + "," + value.substring(index);
}

console.log(split_at_index('3123124', 2));


14
问题要求2个部分。你不回来[value.substring(0, index) ,value.substring(index)]吗?
曼戈

51

ES6 1缸套

// :: splitAt = number => Array<any>|string => Array<Array<any>|string>
const splitAt = index => x => [x.slice(0, index), x.slice(index)]

console.log(
  splitAt(1)('foo'), // ["f", "oo"]
  splitAt(2)([1, 2, 3, 4]) // [[1, 2], [3, 4]]
)
  


3

您可以轻松地对其进行扩展以拆分多个索引,并采用数组或字符串

const splitOn = (slicable, ...indices) =>
  [0, ...indices].map((n, i, m) => slicable.slice(n, m[i + 1]));

splitOn('foo', 1);
// ["f", "oo"]

splitOn([1, 2, 3, 4], 2);
// [[1, 2], [3, 4]]

splitOn('fooBAr', 1, 4);
//  ["f", "ooB", "Ar"]

lodash问题追踪器:https//github.com/lodash/lodash/issues/3014



1

像这样吗?

 function stringConverter(varString, varCommaPosition)
 {
   var stringArray = varString.split("");
   var outputString = '';
   for(var i=0;i<stringArray.length;i++)
   {
     if(i == varCommaPosition)
      {
        outputString = outputString + ',';
      }

     outputString = outputString + stringArray[i];
   }  

   return outputString;
 }

1

您也可以这样做。
https://jsfiddle.net/Devashish2910/8hbosLj3/1/#&togetherjs=iugeGcColp

var str, result;
str = prompt("Enter Any Number");

var valueSplit = function (value, length) {
    if (length < 7) {
        var index = length - 3;
        return str.slice(0, index) + ',' + str.slice(index);
    }
    else if (length < 10 && length > 6) {
        var index1, index2;
        index1 = length - 6;
        index2 = length - 3;
        return str.slice(0,index1) + "," + str.slice(index1,index2) + "," + str.slice(index2);
    }
}

result = valueSplit(str, str.length);
alert(result);

0

如果代码的优雅程度高于正则表达式的性能命中率,那么

'1234567'.match(/^(.*)(.{3})/).slice(1).join(',')
=> "1234,567"

有很多空间可以进一步修改正则表达式以使其更加精确。

如果join()不起作用,则可能需要使用map闭包,此时其他答案可能是字节数和行噪少。


0
function splitText(value, index) {
  if (value.length < index) {return value;} 
  return [value.substring(0, index)].concat(splitText(value.substring(index), index));
}
console.log(splitText('this is a testing peace of text',10));
// ["this is a ", "testing pe", "ace of tex", "t"] 

对于那些想要使用索引将文本拆分为数组的人。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.