Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Получение текста между двумя одинаковыми символами (https://javascript.ru/forum/misc/73255-poluchenie-teksta-mezhdu-dvumya-odinakovymi-simvolami.html)

Artur_Hopf 02.04.2018 08:31

Получение текста между двумя одинаковыми символами
 
Добрый день, помогите разобраться как правильно выдернуть нужное из текста.
Есть массив с нужным текстом:
var arr = ['пчелка жопка вес:0,02:кг', 'одуванчик тараканчик вес:0,0001:кг', 'блошка махнушка вес :0,00001:кг'];

Нужно вытянуть текст между ':тест:'

Конкретно строку можно вытянуть так:

alert(getSubStr('пчелка жопка вес:0,02:кг', ':'));

function getSubStr(str, delim) {
    var a = str.indexOf(delim);
    if (a == -1)
       return '';
    var b = str.indexOf(delim, a+1);
    if (b == -1)
       return '';
    return str.substr(a+1, b-a-1);
}

А как весь массив вытянуть таким образом?:-?

Пробовал так, но где то ошибся, выходит только первая строка:
var arr = ['пчелка жопка вес:0,02:кг', 'одуванчик тараканчик вес:0,0001:кг', 'блошка махнушка вес :0,00001:кг'];

alert(getSubStr(arr, ':'));

function getSubStr(str, delim) {
      for( var i = 0; i < str.length; ++i ){
           var a = str[i].indexOf(delim);
           if (a == -1)
              return '';
           var b = str[i].indexOf(delim, a+1);
           if (b == -1)
             return '';
           return str[i].substr(a+1, b-a-1);
      }
};

laimas 02.04.2018 09:06

var arr = ['пчелка жопка вес:0,02:кг', 'одуванчик тараканчик вес:0,0001:кг', 'блошка махнушка вес :0,00001:кг'];

alert(/\d,\d+/.exec(arr[1]))

Artur_Hopf 02.04.2018 09:20

Цитата:

Сообщение от laimas (Сообщение 482050)
var arr = ['пчелка жопка вес:0,02:кг', 'одуванчик тараканчик вес:0,0001:кг', 'блошка махнушка вес :0,00001:кг'];

alert(/\d,\d+/.exec(arr[1]))

Попробовал так
var arr = ['пчелка жопка вес:0,02:кг', 'одуванчик тараканчик вес:0,0001:кг', 'блошка махнушка вес :0,00001:кг'];

alert(getSubStr(arr));

function getSubStr(str) {
      for( var i = 0; i < str.length; ++i ){
          var r = /\d,\d+/.exec(str[i]);
          return r;
      }
};

опять выходит только одно значение, для пояснения нужен вид :
alert('0,02, 0,0001, 0,00001');

laimas 02.04.2018 09:23

Цитата:

Сообщение от Artur_Hopf
опять выходит только одно значение

Ну так у вас функция возвращает первое же найденное - выход из функции.

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

Artur_Hopf 02.04.2018 09:24

И как
/\d,\d+/.exec(arr)
понимает где у меня там двоеточие? магия какая то :blink:

laimas 02.04.2018 09:31

Цитата:

Сообщение от Artur_Hopf
понимает где у меня там двоеточие?

А оно нужно? Если текст содержит еще значения с запятой, кроме тех что нужны, тогда да, можно чем либо отметить границы нужного, а если только одно, то зачем эти двоеточия? По крайней мере в данном случае для поиска числа они не нужны.

var arr = ['пчелка жопка вес:0,02:кг', 'одуванчик тараканчик вес:0,0001:кг', 'блошка махнушка вес :0,00001:кг'];

var num = arr.map(function(e) {
    return /\d,\d+/.exec(e)
})

alert(num)

Artur_Hopf 02.04.2018 09:39

Цитата:

Сообщение от laimas (Сообщение 482054)
А оно нужно? Если текст содержит еще значения с запятой, кроме тех что нужны, тогда да, можно чем либо отметить границы нужного, а если только одно, то зачем эти двоеточия? По крайней мере в данном случае для поиска числа они не нужны.

var arr = ['пчелка жопка вес:0,02:кг', 'одуванчик тараканчик вес:0,0001:кг', 'блошка махнушка вес :0,00001:кг'];

var num = arr.map(function(e) {
    return /\d,\d+/.exec(e)
})

alert(num)

Спасибо, если в в массиве все же есть еще цифры? Например:
var arr = ['пчелка жопка 1,1 вес:0,02:кг', 'одуванчик тараканчик 1,2 вес:0,0001:кг', 'блошка махнушка 1,3 вес :0,00001:кг'];

var num = arr.map(function(e) {
    return /\d,\d+/.exec(e)
})

alert(num)

laimas 02.04.2018 09:42

Если еще есть, тогда можно так:

var arr = ['пчелка жопка вес:0,02:кг', 'одуванчик 1,1 тараканчик вес:0,0001:кг', 'блошка махнушка 3,56 вес :0,00001:кг'];

var num = arr.map(function(e) {
    return /:(\d+,\d+):/.exec(e)[1]
})

alert(num.join('\n'))

Artur_Hopf 02.04.2018 09:49

laimas,
Идеально, спасибо :yes:


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