Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.04.2013, 19:40
Tie Tie вне форума
Интересующийся
Отправить личное сообщение для Tie Посмотреть профиль Найти все сообщения от Tie
 
Регистрация: 15.12.2010
Сообщений: 11

Получение частей строки, заключенных между двумя подстроками
Здравствуйте!

Столкнулся со следующей задачей. Нужна функция, получающая в массив все куски строки, находящиеся между двух заданных строк. Совсем замучился, не получается написать.
Приведу пример в виде кода:

function myFunc(text, start, finish) {
	...
}

var testText = "привет меня зовут Вася. привет и меня тоже зовут Вася";
var arr = myFunc(testText, 'привет', 'Вася');
// arr должен получиться [' меня зовут ',' и меня тоже зовут ']


Не могли бы вы мне подсказать, как это реализовать?
Ответить с цитированием
  #2 (permalink)  
Старый 03.04.2013, 19:49
Профессор
Отправить личное сообщение для SV0L0CH Посмотреть профиль Найти все сообщения от SV0L0CH
 
Регистрация: 07.11.2010
Сообщений: 301

По заданым строкам составить регулярное выражение и по нему искать.
Ответить с цитированием
  #3 (permalink)  
Старый 04.04.2013, 01:47
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,585

Сообщение от SV0L0CH Посмотреть сообщение
По заданым строкам составить регулярное выражение и по нему искать.
Ну тут какбэ и indexOf обойтись можно.)
__________________
29375, 35
Ответить с цитированием
  #4 (permalink)  
Старый 04.04.2013, 08:40
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от Tie
Нужна функция, получающая в массив все куски строки, находящиеся между двух заданных строк
Как вариант...

var txt = "привет меня зовут Вася. привет и меня тоже зовут Вася";
var a=txtToArray(txt);
alert(a);
function txtToArray(Txt) {
	var a=txt.split('привет');
	var b=[];
	for (var i=1; i<a.length; i++) {
		b[b.length]=a[i].split('Вася')[0];
	};
	return b;
};
Ответить с цитированием
  #5 (permalink)  
Старый 04.04.2013, 10:12
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

Сообщение от ksa Посмотреть сообщение
Как вариант...

var txt = "привет меня зовут Вася. привет и меня тоже зовут Вася";
var a=txtToArray(txt);
alert(a);
function txtToArray(Txt) {
	var a=txt.split('привет');
	var b=[];
	for (var i=1; i<a.length; i++) {
		b[b.length]=a[i].split('Вася')[0];
	};
	return b;
};
var txt = "привет меня зовут Вася. привет, а меня зовут Федя.";
var a=txtToArray(txt);
alert(a);
function txtToArray(Txt) {
	var a=txt.split('привет');
	var b=[];
	for (var i=1; i<a.length; i++) {
		b[b.length]=a[i].split('Вася')[0];
	};
	return b;
};
Ответить с цитированием
  #6 (permalink)  
Старый 04.04.2013, 10:17
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

rgl, да ты просто вскрыл нарыв!
Ответить с цитированием
  #7 (permalink)  
Старый 04.04.2013, 10:32
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

Tie,
Что-бы что-то сделать, нужно более точное условие. Что делать в случае:
"привет-привет меня зовут Вася. привет и меня тоже зовут Вася, да-да, тоже Вася"
Считать началом первый "привет" или второй? И на каком из Васей останавливаться?
Ответить с цитированием
  #8 (permalink)  
Старый 04.04.2013, 10:39
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Предложу такой, обновлённый вариант

var txt = "привет меня зовут Вася. привет, а меня зовут Федя.";
var a=txtToArray(txt);
alert(a);
txt = "привет-привет меня зовут Вася. привет и меня тоже зовут Вася, да-да, тоже Вася";
a=txtToArray(txt);
alert(a);
function txtToArray(Txt) {
	var a=txt.split('привет');
	var b=[];
	var c;
	for (var i=1; i<a.length; i++) {
		c=a[i].split('Вася');
		if (c.length>1) b[b.length]=c[0];
	};
	return b;
};
Ответить с цитированием
  #9 (permalink)  
Старый 04.04.2013, 18:11
Tie Tie вне форума
Интересующийся
Отправить личное сообщение для Tie Посмотреть профиль Найти все сообщения от Tie
 
Регистрация: 15.12.2010
Сообщений: 11

Спасибо огромное!

Принцип понял, дальше сделаем
Вообще, для уточнения условий - ищем первый "привет", потом первого "Васю" - вытаскиваем то что между. Потом второй "привет" и второго "Васю"... Ну и т.д.
Ответить с цитированием
  #10 (permalink)  
Старый 04.04.2013, 23:49
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,585

На ваш вкус.)
function searchBetween(str, first, second){
    var fl = first.length,
        sl = second.length,
        f, s = -sl,
        arr =[];
    while((f = str.indexOf(first, s+sl)) !== -1 && (s = str.indexOf(second,f+fl)) !== -1  ){
        arr.push(str.slice(f+fl, s))
    }
    return arr
}

function searchBetweenReg(str, first, second){
    function escape(str) {
        return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
    }
    var result = [],
        arr = str.split(new RegExp(escape(first) + '([\\s\\S]*?)' + escape(second),''));
    for(var i=1, l = arr.length; i<l; i+=2 ) result.push(arr[i]);
    return result
}

function searchBetweenReg2(str, first, second){
    function escape(str) {
        return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
    }
    var reg = new RegExp( escape(first) + '([\\s\\S]*?)' + escape(second),'g'),
        arr = [],
        sub;
    while((sub = reg.exec(str)) !== null) arr.push(sub[1]);
    return arr
}
__________________
29375, 35
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Связь между двумя окнами. iMIhael Общие вопросы Javascript 2 28.11.2011 13:39
Получение данных строки грида при нажатии сторонней кнопки Allan Stark ExtJS 4 17.11.2011 19:21
[JavaScript] получение данных из адресной строки после знака # GiveMeABreak AJAX и COMET 2 16.09.2009 00:36