[javascript] 특정 색인에 문자열 삽입

다른 문자열의 특정 색인에 문자열을 삽입하려면 어떻게해야합니까?

 var txt1 = "foo baz"

“foo”뒤에 “bar”를 삽입하고 싶다면 어떻게해야합니까?

나는 생각 substring()했지만 더 간단하고 직접적인 방법이 있어야합니다.



답변

자신 만의 splice()문자열을 프로토 타입으로 만들 수 있습니다 .

폴리 필

if (!String.prototype.splice) {
    /**
     * {JSDoc}
     *
     * The splice() method changes the content of a string by removing a range of
     * characters and/or adding new characters.
     *
     * @this {String}
     * @param {number} start Index at which to start changing the string.
     * @param {number} delCount An integer indicating the number of old chars to remove.
     * @param {string} newSubStr The String that is spliced in.
     * @return {string} A new string with the spliced substring.
     */
    String.prototype.splice = function(start, delCount, newSubStr) {
        return this.slice(0, start) + newSubStr + this.slice(start + Math.abs(delCount));
    };
}

String.prototype.splice = function(idx, rem, str) {
    return this.slice(0, idx) + str + this.slice(idx + Math.abs(rem));
};

var result = "foo baz".splice(4, 0, "bar ");

document.body.innerHTML = result; // "foo bar baz"


편집 :rem 절대 값이 되도록 수정했습니다 .


답변

첫 번째 공백 문자가 아닌 특정 인덱스에 삽입하려면 문자열 슬라이싱 / 하위 문자열을 사용해야합니다.

var txt2 = txt1.slice(0, 3) + "bar" + txt1.slice(3);


답변

다음은 다른 모든 프로그래밍 언어와 같이 작동하는 필자가 작성한 방법입니다.

String.prototype.insert = function(index, string) {
  if (index > 0)
  {
    return this.substring(0, index) + string + this.substring(index, this.length);
  }

  return string + this;
};

//Example of use:
var something = "How you?";
something = something.insert(3, " are");
console.log(something)

참고:


답변

다음 기능을 수행하십시오.

function insert(str, index, value) {
    return str.substr(0, index) + value + str.substr(index);
}

그런 다음 사용하십시오.

alert(insert("foo baz", 4, "bar "));

출력 : foo bar baz

C # (Sharp) String.Insert (int startIndex, string value)처럼 정확하게 동작합니다.

참고 : 이 삽입 함수 는 문자열 str (첫 번째 매개 변수)에서 지정된 정수 색인 (두 번째 매개 변수) 앞에 문자열 (세 번째 매개 변수)을 삽입 한 다음 str 을 변경하지 않고 새 문자열을 리턴합니다 !


답변

업데이트 2016 : 다음은 하나의 라이너 접근 방식 (prepend support on 또는 negative )을 기반으로 한 또 다른 재미 있지만 더 심각한 프로토 타입 기능입니다 .RegExpundefinedindex

/**
 * Insert `what` to string at position `index`.
 */
String.prototype.insert = function(what, index) {
    return index > 0
        ? this.replace(new RegExp('.{' + index + '}'), '$&' + what)
        : what + this;
};

console.log( 'foo baz'.insert('bar ', 4) );  // "foo bar baz"
console.log( 'foo baz'.insert('bar ')    );  // "bar foo baz"

이전 (2012 년으로 돌아 가기) 재미있는 솔루션 :

var index = 4,
    what  = 'bar ';

'foo baz'.replace(/./g, function(v, i) {
    return i === index - 1 ? v + what : v;
});  // "foo bar baz"


답변

누군가 문자열에 여러 인덱스로 텍스트를 삽입하는 방법을 찾고 있다면 다음을 시도하십시오.

String.prototype.insertTextAtIndices = function(text) {
    return this.replace(/./g, function(character, index) {
        return text[index] ? text[index] + character : character;
    });
};

예를 들어, 이것을 사용 <span>하여 문자열의 특정 오프셋에 태그 를 삽입 할 수 있습니다 .

var text = {
    6: "<span>",
    11: "</span>"
};

"Hello world!".insertTextAtIndices(text); // returns "Hello <span>world</span>!"


답변

이것은 기본적으로 @ Bass33 이하는 일을하고 있습니다. 단, 음수 색인을 사용하여 끝에서 계산하는 옵션도 제공합니다. substr 방법과 같은 종류가 허용합니다.

// use a negative index to insert relative to the end of the string.

String.prototype.insert = function (index, string) {
  var ind = index < 0 ? this.length + index  :  index;
  return  this.substring(0, ind) + string + this.substring(ind, this.length);
};

사용 사례 : 명명 규칙을 사용하여 전체 크기 이미지를 가지고 있지만 축소판 URL도 제공하도록 데이터를 업데이트 할 수 없다고 가정합니다.

var url = '/images/myimage.jpg';
var thumb = url.insert(-4, '_thm');

//    result:  '/images/myimage_thm.jpg'