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

17

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

"hello is it me you're looking for"

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

s = string.cut(0,3);

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

"lo is it me you're looking for"

EDIT : может быть не от 0 до 3. Это может быть от 5 до 7.

s = string.cut(5,7);

вернет

"hellos it me you're looking for"
    
задан dotty 10.11.2009 в 13:15
источник
  • Просто любопытно ... Метод String.substr (), похоже, работает для большинства сценариев, с которыми я сталкиваюсь - однако вам кажется, что нужно удалить «средний» бит строки - есть ли у вас образец «реального мира» где это происходит регулярно? –  scunliffe 10.11.2009 в 14:50
  • Почему бы вам не сократить 0-2 и 5-6 вместо этого? –  dlamblin 16.12.2009 в 00:17

8 ответов

28

Ты почти там. Вы хотите:

Ссылка

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

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

Как только предоставление начала (первый arg) берет из этого индекса в конец строки.

Обновить, как насчет чего-то типа:

function cut(str, cutStart, cutEnd){
  return str.substr(0,cutStart) + str.substr(cutEnd+1);
}
    
ответ дан Jake 10.11.2009 в 13:18
источник
  • Эта функция имеет проблему с разрывами строк, я предлагаю использовать подстроку, а не substr, как показано ниже, return this.substring (0, cutStart) + this.substring (cutEnd); –  Liad Livnat 10.10.2015 в 13:13
6

Использование

подстрока

функция

  

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

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).

    
ответ дан rahul 10.11.2009 в 13:17
источник
4
s = string.cut(5,7);

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

String.prototype.cut= function(i0, i1) {
    return this.substring(0, i0)+this.substring(i1);
}
    
ответ дан bobince 10.11.2009 в 13:32
источник
  • Это javascript? подстрока –  user956584 02.10.2014 в 11:17
3

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

    
ответ дан Cheeso 10.11.2009 в 13:15
источник
3

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

  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!"
    
ответ дан filoxo 28.12.2015 в 22:01
источник
1

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

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

Как указано здесь: Ссылка

  

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

    
ответ дан Quickredfox 12.08.2010 в 17:56
источник
0

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

var s = "I am a string";

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

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

Ссылка

Ссылка

    
ответ дан kemiller2002 10.11.2009 в 13:18
источник
0

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

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

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

    
ответ дан Himadri 10.11.2009 в 13:22
источник