Javascript에서 문자열을 N 문자로 자르는 방법은 무엇입니까?


169

Javascript를 사용하여 인수로 전달 된 문자열을 지정된 길이로 자르고 인수로 전달하는 함수를 만드는 방법은 무엇입니까? 예를 들면 다음과 같습니다.

var string = "this is a string";
var length = 6;
var trimmedString = trimFunction(length, string);

// trimmedString should be:
// "this is"

누구나 아이디어가 있습니까? 부분 문자열 사용에 대해 들었지만 이해하지 못했습니다.


1
"this is"= 7 characters, 당신은 그렇게 하시겠습니까?
aziz punjani

질문에서 말했듯이 하위 문자열을 사용 하여이 작업을 수행하는 방법을 잘 모르겠습니다. 예를 들어 주시겠습니까? 나는 그것이 작동한다면 물론 대답이다.;) @Interstellar_Coder oops, typo!

답변:


346

왜 서브 스트링을 사용하지 않는가? string.substring(0, 7);첫 번째 인수 (0)가 시작점입니다. 두 번째 인수 (7)는 끝점 (독점)입니다. 자세한 정보는 여기에 있습니다.

var string = "this is a string";
var length = 7;
var trimmedString = string.substring(0, length);

감사! 완벽하게 작동합니다. 시간 제한이 지나면 바로 답변으로 표시하겠습니다!

24
최대 길이를 초과하는 문자열에 대한 줄임표를 원할 경우 (최대 길이가 길수록 더 유용 할 수 있음) var string = "this is a string"; var 길이 = 20; var trimmedString = string.length> 길이? string.substring (0, 길이-3) + "...": string.substring (0, 길이);

5
string.substr (start, length)은 이상하게 동작합니다. length가 문자열 길이보다 길면 비어 있습니다. string.substring (start, end)는 예상대로 작동합니다. 즉 주어진 끝 부분에 문자가 충분하지 않으면 문자열을 끝까지 반환합니다!
centic

1
사용하십시오 string.substr. 이전 의견에도 불구하고 이상한 행동이 없습니다
Gibolt

.substring(from, to)인덱스를 가져옵니다 . .substr (from, length) does not, 또한 .substr () 은 첫 번째 인수가 음수 일 때 IE에서 불일치하는 데 사용됩니다 .
Bob Stein

47

Will의 의견을 답변에 복사 하면 도움이됩니다.

var string = "this is a string";
var length = 20;
var trimmedString = string.length > length ? 
                    string.substring(0, length - 3) + "..." : 
                    string;

고마워 윌.

https://jsfiddle.net/t354gw7e/ :) 관심있는 사람을위한 jsfiddle


1
string.substring(0, length)else의 경우에는 아무런 의미가 없습니다 . 문자열은 그 시점에서 <= 20 문자이므로 보장하십시오 string.
Nick Sweeting 2016 년

15

코드 깔끔함을 위해 확장을 사용하는 것이 좋습니다. 내부 객체 프로토 타입을 확장하면 해당 프로토 타입에 의존하는 라이브러리가 엉망이 될 수 있습니다.

String.prototype.trimEllip = function (length) {
  return this.length > length ? this.substring(0, length) + "..." : this;
}

그리고 그것을 다음과 같이 사용하십시오 :

var stringObject= 'this is a verrrryyyyyyyyyyyyyyyyyyyyyyyyyyyyylllooooooooooooonggggggggggggsssssssssssssttttttttttrrrrrrrrriiiiiiiiiiinnnnnnnnnnnnggggggggg';
stringObject.trimEllip(25)

5
왜 안돼? 표준 객체의 프로토 타입을 덮어 쓰고 있기 때문 .trim()입니다. 사용하는 다른 라이브러리 및 도구에서 예기치 않은 동작이 발생할 수 있습니다.
Oleg Berman 17'8

1
그게 내가 필요한 것
naneri


2

조금 늦었다. 나는 응답해야했다. 이것이 가장 간단한 방법입니다.

// JavaScript
function fixedSize_JS(value, size) {
  return value.padEnd(size).substring(0, size);
}

// JavaScript (Alt)
var fixedSize_JSAlt = function(value, size) {
  return value.padEnd(size).substring(0, size);
}

// Prototype (preferred)
String.prototype.fixedSize = function(size) {
  return this.padEnd(size).substring(0, size);
}

// Overloaded Prototype
function fixedSize(value, size) {
  return value.fixedSize(size);
}

// usage
console.log('Old school JS -> "' + fixedSize_JS('test (30 characters)', 30) + '"');
console.log('Semi-Old school JS -> "' + fixedSize_JSAlt('test (10 characters)', 10) + '"');
console.log('Prototypes (Preferred) -> "' + 'test (25 characters)'.fixedSize(25) + '"');
console.log('Overloaded Prototype (Legacy support) -> "' + fixedSize('test (15 characters)', 15) + '"');

단계적으로. .padEnd-문자열 길이를 보장합니다

"padEnd () 메소드는 결과 문자열이 주어진 길이에 도달하도록 현재 문자열을 주어진 문자열 (필요한 경우 반복)로 채 웁니다. 패딩은 현재 문자열의 끝 (오른쪽)에서 적용됩니다.이 대화식의 소스 예는 GitHub 저장소에 저장됩니다. " 출처 : developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

.substring-필요한 길이로 제한

타원을 추가하도록 선택한 경우 타원을 출력에 추가하십시오.

일반적인 JavaScript 사용법에 대한 4 가지 예를 들었습니다. 레거시 지원을 위해 String 프로토 타입을 오버로드와 함께 사용하는 것이 좋습니다. 나중에 구현하고 변경하기가 훨씬 쉽습니다.


여보세요! 코드 진행 상황에 대한 설명도 포함하는 것이 좋습니다. 귀하의 솔루션이 허용 된 답변과 얼마나 유사한 지 감안할 때 아마도 padEnd수행중인 작업 에 대한 약간의 세부 사항입니다 .
Mattie

내 솔루션은 훨씬 깨끗하고 표준화되어 있으며 여러 용도를 보여줍니다. padEnd () 메서드는 현재 문자열을 주어진 문자열 (필요한 경우 반복)로 채워서 결과 문자열이 주어진 길이에 도달하도록합니다. 패딩은 현재 문자열의 끝 (오른쪽)부터 적용됩니다. 이 대화식 예제의 소스는 GitHub 리포지토리에 저장됩니다. 출처 : developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Matthew Egan

1
나는 당신의 대답의 질에 반대하지 않습니다. 더 나은 방법에 대한 제안. 귀하의 설명은 훌륭합니다-답변을 편집하여 거기에 넣으십시오!
Mattie

안녕 매트, 나는 당신의 대답을 좋아합니다. 조금 다른 질문에 답하는 것은 유감입니다. 그는 원래 고정 문자열 길이가 아닌 문자열 자르기에 대해 물었습니다.
Jakub Kriz

0
    let trimString = function (string, length) {
      return string.length > length ? 
             string.substring(0, length) + '...' :
             string;
    };

사용 사례,

let string = 'How to trim a string to N chars in Javascript';

trimString(string, 20);

//How to trim a string...

-1

이 코드를 사용해야한다고 생각합니다 :-)

    // sample string
            const param= "Hi you know anybody like pizaa";

         // You can change limit parameter(up to you)
         const checkTitle = (str, limit = 17) => {
      var newTitle = [];
      if (param.length >= limit) {
        param.split(" ").reduce((acc, cur) => {
          if (acc + cur.length <= limit) {
            newTitle.push(cur);
          }
          return acc + cur.length;
        }, 0);
        return `${newTitle.join(" ")} ...`;
      }
      return param;
    };
    console.log(checkTitle(str));

// result : Hi you know anybody ...

1
이 답변을 왜 추가했는지 궁금합니다. 질문에 이미 허용 된 답변과 몇 가지 다른 합리적인 답변이 있으며이 모두가 이보다 더 간단합니다. 아니면 당신의 ":-)"가 이것을 농담으로 만들었습니까?
Scott Sauyet

허용되는 답변도 가장 높은 등급의 답변입니다. 다른 문제를 해결하려고한다고 생각합니다. (그리고 나는 이전에 언급 할 때 그것을 알지 못했습니다.) 그것은 거의 문제가 아니라는 것이 아니라 결국 질문과 약간 관련이 있습니다. 주어진 입력으로 출력 문자열이 기본 매개 변수 23보다 길고 접미사 문자 보다 긴 문자 라는 이상한 효과가 있습니다. 이상해 보인다. 174" ..."
Scott Sauyet

나는 또한 이것이 더 간단한 구현을 사용할 수 있다고 생각한다 .
Scott Sauyet
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.