我有一个字符串,我需要在给定的索引上拆分,然后返回两个部分,用逗号分隔。例如:
string: 8211 = 8,211
98700 = 98,700
所以我需要能够在任何给定索引上拆分字符串,然后返回字符串的两半。内置方法似乎执行拆分但只返回拆分的一部分。
string.slice只返回提取的字符串部分。 string.split只允许你拆分字符而不是索引 string.substring做我需要的但只返回子串 string.substr非常相似 - 仍然只返回子串
答案 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;
答案 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)
你也可以在
使用数字格式化程序JShttps://code.google.com/p/javascript-number-formatter/
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
标志(全局),因此它会替换每一次出现,而不仅仅是第一次找到。