@bqio
https://bqio.github.io/

Как сделать поиск в строке в обратную сторону, начиная с заданной позиции?

Есть строка:
var text = 
"function parse(str) { \
        var args = [].slice.call(arguments, 1), \
            i = 0; \
        return str.replace(/%s/g, function() { \
            return args[i++]; \
        }); \
}";


Нужно получить название функции (в данном случае parse) через поиск по "(":
var pos_e = text.indexOf("("); 
// 14
var pos = text.lastIndexOf(' ', pos); 
// возвращает 177, как сделать, чтобы он с 14-й позиции пошёл назад до пробела, а не вперёд?
var val = text.substring(pos, pos_e);
/*
(str) {
        var args = [].slice.call(arguments, 1),
            i = 0;

        return str.replace(/%s/g, function() {
            return args[i++];
        });
    }
*/
  • Вопрос задан
  • 312 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
// возвращает 177, как сделать, чтобы он с 14-й позиции пошёл назад до пробела, а не вперёд?
Указать правильное имя переменной во втором аргументе lastIndexOf().

Ну и, скажем так, ваш метод имеет очень узкую область применения. Он не переварит IIFE, var parse = function () {} и т.п. Да даже на банальном function foo (bar) {} оно загнётся.
Более правильным решением может быть построение AST и работа с ним. Вторым по правильности будет поиск при помощи регулярных выражений - он добавит гибкости в ваше решение, но всё равно не покроет все варианты.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы