вырезать часть строки - PullRequest
       38

вырезать часть строки

20 голосов
/ 10 ноября 2009

Скажи, у меня есть строка

"hello is it me you're looking for"

Я хочу вырезать часть этой строки и вернуть новую строку, что-то вроде

s = string.cut(0,3);

s теперь будет равно:

"lo is it me you're looking for"

РЕДАКТ. : не может быть от 0 до 3. Это может быть от 5 до 7.

s = string.cut(5,7);

вернется

"hellos it me you're looking for"

Ответы [ 8 ]

32 голосов
/ 10 ноября 2009

Ты почти у цели. То, что вы хотите:

http://www.w3schools.com/jsref/jsref_substr.asp

Итак, в вашем примере:

Var string = "hello is it me you're looking for";
s = string.substr(3);

Поскольку только предоставление начала (первого аргумента) занимает от этого индекса до конца строки.

Обновление, как насчет чего-то вроде:

function cut(str, cutStart, cutEnd){
  return str.substr(0,cutStart) + str.substr(cutEnd+1);
}
8 голосов
/ 10 ноября 2009

Используйте

подстрока

функция

Возвращает подмножество строки между один индекс и другой, или через конец строки.

substring(indexA, [indexB]);

indexA

An integer between 0 and one less than the length of the string. 

IndexB (необязательно) Целое число от 0 до длины строки.

подстрока извлекает символы из indexA до, но не включая indexB. В частности:

* If indexA equals indexB, substring returns an empty string.
* If indexB is omitted, substring extracts characters to the end 
  of the string.
* If either argument is less than 0 or is NaN, it is treated as if 
  it were 0.
* If either argument is greater than stringName.length, it is treated as 
  if it were stringName.length.

Если indexA больше, чем indexB, то эффект подстроки будет таким, как если бы два аргумента были заменены; например, str.substring (1, 0) == str.substring (0, 1).

4 голосов
/ 10 ноября 2009
s = string.cut(5,7);

Я бы предпочел сделать это как отдельную функцию, но если вы действительно хотите иметь возможность вызывать его напрямую в String из прототипа:

String.prototype.cut= function(i0, i1) {
    return this.substring(0, i0)+this.substring(i1);
}
3 голосов
/ 29 декабря 2015

Некоторые другие более современные альтернативы:

  1. Разделить и присоединиться

    function cutFromString(oldStr, fullStr) {
      return fullStr.split(oldStr).join('');
    }
    cutFromString('there ', 'Hello there world!'); // "Hello world!"
    

    Адаптировано с Пример MDN

  2. String.replace () , в котором используется регулярное выражение. Это означает, что он может быть более гибким с учетом регистра.

    function cutFromString(oldStrRegex, fullStr) {
      return fullStr.replace(oldStrRegex, '');
    }
    cutFromString(/there /i , 'Hello THERE world!'); // "Hello world!"
    
3 голосов
/ 10 ноября 2009

string.substring () - это то, что вы хотите.

1 голос
/ 12 августа 2010

Так же, как ссылка для тех, кто ищет похожую функцию, у меня есть реализация String.prototype.bisect, которая разбивает строку на 3 части, используя разделитель regex / string и возвращает части строки before, delimiter-match и after ....

/*
      Splits a string 3-ways along delimiter.
      Delimiter can be a regex or a string.
      Returns an array with [before,delimiter,after]
*/
String.prototype.bisect = function( delimiter){
  var i,m,l=1;
  if(typeof delimiter == 'string') i = this.indexOf(delimiter);
  if(delimiter.exec){
     m = this.match(delimiter);
     i = m.index;
     l = m[0].length
  }
  if(!i) i = this.length/2;
  var res=[],temp;
  if(temp = this.substring(0,i)) res.push(temp);
  if(temp = this.substr(i,l)) res.push(temp);
  if(temp = this.substring(i+l)) res.push(temp);
  if(res.length == 3) return res;
  return null;
};

/* though one could achieve similar and more optimal results for above with: */

"my string to split and get the before after splitting on and once".split(/and(.+)/,2) 

// outputs => ["my string to split ", " get the before after splitting on and once"]

Как указано здесь: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/String/split

Если разделитель является регулярным выражением, содержащим захватные скобки, то каждый раз, когда разделитель сопоставляется, результаты (включая любые неопределенные результаты) захватывающих скобок вставляются в выходной массив. Однако не все браузеры поддерживают эту возможность.

0 голосов
/ 10 ноября 2009

Попробуйте следующее:

var str="hello is it me you're looking for";
document.write(str.substring(3)+"<br />");

Вы можете проверить эту ссылку

0 голосов
/ 10 ноября 2009

Вам нужно сделать что-то вроде следующего:

var s = "I am a string";

var sSubstring = s.substring(2); // sSubstring now equals "am a string".

У вас есть два варианта, как это сделать:

http://www.quirksmode.org/js/strings.html#substring

http://www.quirksmode.org/js/strings.html#substr

...