주어진 인덱스에서 문자열을 두 개로 분할하고 두 부분을 모두 반환


84

주어진 인덱스에서 분할 한 다음 두 부분을 쉼표로 구분하여 반환해야하는 문자열이 있습니다. 예를 들면 :

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

따라서 주어진 인덱스에서 문자열을 분할 한 다음 문자열의 절반을 모두 반환 할 수 있어야합니다. 내장 메서드는 분할을 수행하는 것처럼 보이지만 분할의 한 부분 만 반환합니다.

string.slice는 문자열의 추출 된 부분 만 반환합니다. string.split은 인덱스가 아닌 문자로만 분할 할 수 있습니다.


2
예상되는 출력을 보여줄 수 있습니까?
Rohan Kumar

2
split()의심 할 여지없이 알고 있듯이 문자열 배열을 반환합니다. 작동하지 않는 코드를 포함 해주세요.
Wim Ombelets 2013 년

이것은 천 단위 구분 기호가 아닙니까?
Ja͢ck 2013 년

정말 분할 하시겠습니까, 아니면 천 단위 구분 기호 만 삽입 하시겠습니까? 후자 인 경우 다음을 시도해 볼 수 var n='1234567890'; alert(n.replace(/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g,'$&,'));있습니다.. 참조 : safaribooksonline.com/library/view/regular-expressions-cookbook/…
Manngo

답변:


107

이 시도

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

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


17
질문은 두 부분으로 구성되었습니다. 돌아와야하지 [value.substring(0, index) ,value.substring(index)]않니?
Manngo

55

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

인덱스를 사용하여 텍스트를 배열로 분할하려는 사람들을 위해.


0

정규 표현식과 보간 된 문자열을 사용하여 정말 해키 한 한 줄짜리를 원한다면 ...

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

이 코드는 정규식에서 반환 된 값을 대체하여 문자열을 분할합니다. 정규식은 문자가 아닌 위치를 반환하므로 초기 문자열에서 문자가 손실되지 않습니다. 이 작업을 수행하는 방법은 룩 비하인드 (look-behind)와 ^앵커 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미리보기와 $앵커 를 사용하여 끝에서 th 위치를 찾지 만 끝에서 이러한 위치 집합을 원하는만큼 캡처합니다. 그런 다음 위치를 쉼표로 바꿉니다. g플래그 (global)를 사용하여 처음 발견 된 것뿐만 아니라 모든 발생을 대체합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.