Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Вытянуть подстроку из строки от "а" до "б" (https://javascript.ru/forum/events/26244-vytyanut-podstroku-iz-stroki-ot-do-b.html)

McAlex 02.03.2012 03:59

Вытянуть подстроку из строки от "а" до "б"
 
Подскажите, ребята, как выдернуть из строки текст, который находится между известными символами?
Например на flex'e все делается довольно просто:
var str = "OT=35434kfdoB"
var j:String = str.slice(str.indexOf("OT="), str.indexOf("B"));
В итоге j = "35434kfdo";

Искал на разных сайтах, не вижу ничего подобного. Метод slice в javascript'e, как я понял позволяет задавать только индекс символа в численном виде. Как по-другому реализовать данную задачу?

P.S. строка меняется, поэтому я не знаю с какой до какой позиции применять slice.

devote 02.03.2012 04:07

alert( "OT=35434kfdoB".replace(/OT=(.*)B/, '$1') );

McAlex 02.03.2012 04:24

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

Result=ok
Price=23423.54
Bonus=4645.12

Мне нужно получить в две разные переменные эти два числа. Но строка меняется, иногда приходит просто:

Price=22323.74
Bonus=6545.56

Aetae 02.03.2012 13:17

var str = "OT=35434kfdoB"
var j = str.slice(str.indexOf("OT=")+3, str.indexOf("B")); //3 - длина "OT=", ибо indexOf в js возвращает вхождение подстроки
alert(j)


Но обычно делают используют регулярки:
var str='Result=ok\nPrice=23423.54\nBonus=4645.12'
var j = str.match(/Price=([\d\.]+)[\s\S]*Bonus=([\d\.]+)/)
alert(j.join('\n--\n'))

McAlex 02.03.2012 16:41

Спасибо, Aetae!
То что надо.

nikita.mmf 02.03.2012 18:02

function parseString( str ) {
    var res = {};
    var lineList = str.split("\n");
    for ( var i = 0, line; typeof(line = lineList[i++]) == 'string'; ) {
        if ( /^\s*$/.test( line ) ) { continue; }
        var lineSplit = line.split("=");
        if ( "1" in lineSplit ) {
            res[ lineSplit[0] ] = lineSplit[1];
        }
    }
    return res;
}


Часовой пояс GMT +3, время: 17:54.