функция должна быть улучшена, должна возвращать _ и число (как бы долго)

0

Я только что просмотрел некоторые функции в проекте и нашел проблему.

У меня есть функция:

context = context.slice(-2);

Предполагается, что он должен получить последний бит строки, например "something_2", возвращаемое значение должно быть "_2", но что, если функция встречается с "something_230", в настоящее время код, который я предполагаю, будет возвращать только "30", а не '_230'.

var cleanItemId = function(context)
{
    context = context.slice(-2);
    return context;
}

Я рассматриваю это как большую проблему, но я не уверен, как подойти к проблеме, я полагаю, мне нужно выражение reg, может ли кто-нибудь указать мне в правильном направлении?

Любая помощь будет высоко ценится. Заранее спасибо.

Теги:
function

4 ответа

3
Лучший ответ

Я предполагаю, что мне нужно рег-выражение, может кто-то указать мне в правильном направлении?

Регулярное выражение будет работать, но вам это не обязательно нужно. подходы:

  1. Используйте регулярное выражение.

    var m = context.match(/_(\d+)$/);
    if (m) {
        // Use 'm[1]' to get the digits
    }
    

    Это выражение говорит: "Буквальное _ следует одна или несколько цифр, после чего в конце строки, захватив цифры в качестве захвата группы."

  2. Используйте split('_') и возьмите последний элемент в результирующем массиве.

    var m = context.split('_');
    // Use 'm[m.length - 1]' to get the digits
    
  3. Используйте lastIndexOf чтобы найти _ а затем возьмите оставшуюся часть строки.

    var x = context.lastIndexOf('_');
    if (x !== -1) {
        // Use 'context.substring(x + 1)' to get the digits
    }
    
  • 1
    Я думаю, что это в значительной степени охватывает все разумные решения :)
3

Вам не нужно регулярное выражение (пока).

var str = "something_230";
var pos = str.lastIndexOf("_");
var out = str.substr(pos); // _230
0

Создание функции кажется бесполезным:

context = context.replace(/^.*(_\d+)$/, '$1');

Это также работает:

context = context.replace(/^.*(?=_\d+$)/, '');

Если вы хотите первую часть:

context = context.replace(/_\d+$/, '');

Подробности здесь: http://www.javascriptkit.com/javatutors/redev.shtml.

0
context = context.split('_')[1];

Это если вы уверены, что в строке есть _. Если вам также нужно проанализировать строку как число:

var num = +context.split('_')[1];
  • 1
    Что если строка "some_thing_230" ?
  • 0
    Если есть возможность такого случая: context.split('_').reverse()[0] . Я просто отвечаю в зависимости от контекста.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню