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

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

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

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

Slice 只返回字符串的提取部分。 Split 只允许在字符而不是索引上进行拆分 Substring 执行我需要的操作,但只返回子字符串 Subr 非常相似-仍然只返回子字符串

170169 次浏览

试试这个

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


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

您也可以使用数字格式化程序 JS

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

Format options

Http://jsfiddle.net/chauhangs/hue3h/

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

像这样。

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

ES61线

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


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

你也可以这样做。
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);

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

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

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

如果 join()不起作用,那么您可能需要使用带闭包的 map,这时其他的应答可能会减少字节和行噪声。

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"]

对于那些希望使用索引将文本拆分为数组的用户。

您可以轻松地将其展开,以便在多个索引上进行拆分,并获取一个数组或字符串

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"]

发射追踪器: https://github.com/lodash/lodash/issues/3014

打印稿:

const splitOn: {
<T = string>(s: T, ...i: number[]): T[];
<T extends any[]>(s: T, ...i: number[]): T[];
} = <T>(slicable: string | T[], ...indices: number[]) =>
[0, ...indices].map((n, i, m) => slicable.slice(n, m[i + 1]));

如果您想要一个使用正则表达式和内插字符串的非常蹩脚的一行程序..。

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)));

在这里,我们通过使用向前看和 $锚来找到结束时的 idxth 位置,但是我们也从结束时捕获任意数量的这些位置集。然后我们用逗号替换这个位置。我们使用 g标志(global) ,因此它会替换每个匹配项,而不仅仅是第一个找到的匹配项。

    function splitAt(str, index) {
const fst = [...str];    //convert string into char array
const snd = fst.splice(index); //calc snd element while changing fst
return [fst.join(''), snd.join('')]; //join char arrays for each tuple item
}


console.log(splitAt("12345", 2)); // ["12", "345"]