函数需要改进,应该返回一个_和一个数字(不管多长)

时间:2013-11-29 12:48:46

标签: javascript jquery function

我刚刚审查了项目中的一些功能并发现了问题。

我在函数中有以下内容:

context = context.slice(-2);

这应该是获取字符串的最后一位,例如'something_2'返回的值应该是'_2'但是如果函数遇到'something_230',那么上面的代码假设只返回'30 '而不是'_230'。

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

我认为这是一个大问题,但我不确定如何解决问题,我认为我需要一个reg表达式,有人能指出我正确的方向吗?

任何帮助将不胜感激。提前谢谢。

4 个答案:

答案 0 :(得分:3)

您还不需要正则表达式。

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

答案 1 :(得分:3)

  

我认为我需要一个reg表达式,有人能指出我正确的方向吗?

正则表达式可以使用,但您不一定需要。接近:

  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
    }
    

答案 2 :(得分:0)

创建一个函数似乎没用:

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

这个也有效:

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

如果你想要第一部分:

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

此处的详细信息:http://www.javascriptkit.com/javatutors/redev.shtml

答案 3 :(得分:0)

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

如果你确定字符串中最后有一个_。如果您还需要将字符串解析为数字:

var num = +context.split('_')[1];