Я только что просмотрел некоторые функции в проекте и нашел проблему.
У меня есть функция:
context = context.slice(-2);
Предполагается, что он должен получить последний бит строки, например "something_2", возвращаемое значение должно быть "_2", но что, если функция встречается с "something_230", в настоящее время код, который я предполагаю, будет возвращать только "30", а не '_230'.
var cleanItemId = function(context)
{
context = context.slice(-2);
return context;
}
Я рассматриваю это как большую проблему, но я не уверен, как подойти к проблеме, я полагаю, мне нужно выражение reg, может ли кто-нибудь указать мне в правильном направлении?
Любая помощь будет высоко ценится. Заранее спасибо.
Я предполагаю, что мне нужно рег-выражение, может кто-то указать мне в правильном направлении?
Регулярное выражение будет работать, но вам это не обязательно нужно. подходы:
Используйте регулярное выражение.
var m = context.match(/_(\d+)$/);
if (m) {
// Use 'm[1]' to get the digits
}
Это выражение говорит: "Буквальное _
следует одна или несколько цифр, после чего в конце строки, захватив цифры в качестве захвата группы."
Используйте split('_')
и возьмите последний элемент в результирующем массиве.
var m = context.split('_');
// Use 'm[m.length - 1]' to get the digits
Используйте lastIndexOf
чтобы найти _
а затем возьмите оставшуюся часть строки.
var x = context.lastIndexOf('_');
if (x !== -1) {
// Use 'context.substring(x + 1)' to get the digits
}
Вам не нужно регулярное выражение (пока).
var str = "something_230";
var pos = str.lastIndexOf("_");
var out = str.substr(pos); // _230
Создание функции кажется бесполезным:
context = context.replace(/^.*(_\d+)$/, '$1');
Это также работает:
context = context.replace(/^.*(?=_\d+$)/, '');
Если вы хотите первую часть:
context = context.replace(/_\d+$/, '');
Подробности здесь: http://www.javascriptkit.com/javatutors/redev.shtml.
context = context.split('_')[1];
Это если вы уверены, что в строке есть _
. Если вам также нужно проанализировать строку как число:
var num = +context.split('_')[1];
"some_thing_230"
?
context.split('_').reverse()[0]
. Я просто отвечаю в зависимости от контекста.