03.04.2013, 19:40
|
Интересующийся
|
|
Регистрация: 15.12.2010
Сообщений: 11
|
|
Получение частей строки, заключенных между двумя подстроками
Здравствуйте!
Столкнулся со следующей задачей. Нужна функция, получающая в массив все куски строки, находящиеся между двух заданных строк. Совсем замучился, не получается написать.
Приведу пример в виде кода:
function myFunc(text, start, finish) {
...
}
var testText = "привет меня зовут Вася. привет и меня тоже зовут Вася";
var arr = myFunc(testText, 'привет', 'Вася');
// arr должен получиться [' меня зовут ',' и меня тоже зовут ']
Не могли бы вы мне подсказать, как это реализовать?
|
|
03.04.2013, 19:49
|
Профессор
|
|
Регистрация: 07.11.2010
Сообщений: 301
|
|
По заданым строкам составить регулярное выражение и по нему искать.
|
|
04.04.2013, 01:47
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,585
|
|
Сообщение от SV0L0CH
|
По заданым строкам составить регулярное выражение и по нему искать.
|
Ну тут какбэ и indexOf обойтись можно.)
__________________
29375, 35
|
|
04.04.2013, 08:40
|
|
CacheVar
|
|
Регистрация: 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;
};
|
|
04.04.2013, 10:12
|
|
Профессор
|
|
Регистрация: 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;
};
|
|
04.04.2013, 10:17
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,215
|
|
rgl, да ты просто вскрыл нарыв!
|
|
04.04.2013, 10:32
|
|
Профессор
|
|
Регистрация: 28.02.2011
Сообщений: 349
|
|
Tie,
Что-бы что-то сделать, нужно более точное условие. Что делать в случае:
"привет-привет меня зовут Вася. привет и меня тоже зовут Вася, да-да, тоже Вася"
Считать началом первый "привет" или второй? И на каком из Васей останавливаться?
|
|
04.04.2013, 10:39
|
|
CacheVar
|
|
Регистрация: 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;
};
|
|
04.04.2013, 18:11
|
Интересующийся
|
|
Регистрация: 15.12.2010
Сообщений: 11
|
|
Спасибо огромное!
Принцип понял, дальше сделаем
Вообще, для уточнения условий - ищем первый "привет", потом первого "Васю" - вытаскиваем то что между. Потом второй "привет" и второго "Васю"... Ну и т.д.
|
|
04.04.2013, 23:49
|
|
Тлен
|
|
Регистрация: 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
|
|
|
|