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

时间:2013-05-08 13:16:44

标签: javascript

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

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

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

string.slice只返回提取的字符串部分。 string.split只允许你拆分字符而不是索引 string.substring做我需要的但只返回子串 string.substr非常相似 - 仍然只返回子串

8 个答案:

答案 0 :(得分:79)

试试这个

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

console.log(splitValue("3123124", 2));

答案 1 :(得分:40)

ES6 1-liner



// :: 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]]
)
  
&#13;
&#13;
&#13;

答案 2 :(得分: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

答案 3 :(得分:1)

你也可以在

使用数字格式化程序JS

https://code.google.com/p/javascript-number-formatter/

Format options

http://jsfiddle.net/chauhangs/hUE3h/

  format("##,###.", 98700)
  format("#,###.", 8211)

答案 4 :(得分: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;
 }

答案 5 :(得分: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);

答案 6 :(得分: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"] 

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

答案 7 :(得分:0)

如果您想要使用正则表达式和内插字符串的真正hacky one-liner...

const splitString = (value, idx) => value.split(new RegExp(`(?<=^.{${idx}})`));
console.log(splitString('abcdefgh', 5));

此代码表示通过替换正则表达式中返回的值来拆分字符串。正则表达式返回一个位置,而不是一个字符,所以我们不会丢失初始字符串中的字符。它这样做的方法是通过后视和 ^ 锚点找到从字符串开头开始有 index 个字符的位置。


为了解决您提出的从末尾开始每三个位置添加逗号的问题,正则表达式会略有不同,我们将使用替换而不是拆分。

const values = [ 8211, 98700, 1234567890 ];
const addCommas = (value, idx) => value.replace(new RegExp(`(?=(.{${idx}})+$)`, 'g'), ',');

console.log(values.map(v => addCommas(v.toString(), 3)));

在这里,我们通过使用前瞻和 idx 锚点找到从末尾开始的第 $ 个位置,但我们也从末尾捕获了任意数量的这些位置集。然后我们用逗号替换位置。我们使用 g 标志(全局),因此它会替换每一次出现,而不仅仅是第一次找到。