具有反向索引的子串

时间:2010-03-08 09:29:22

标签: javascript string

如何从“xxx_456”中提取“456”,其中xxx是无限长的?

11 个答案:

答案 0 :(得分:164)

slice在IE和其他浏览器中运行得很好,它是规范的一部分,也是最有效的方法:

alert("xxx_456".slice(-3));
//-> 456

slice Method (String) - MSDN
slice - Mozilla Developer Center

答案 1 :(得分:68)

var str = "xxx_456";
var str_sub = str.substr(str.lastIndexOf("_")+1);

如果结尾并不总是三位数(并用下划线分隔)。如果结束分隔符并不总是下划线,那么您可以使用正则表达式:

var pat = /([0-9]{1,})$/;
var m = str.match(pat);

答案 2 :(得分:23)

substring方法允许您指定开始和结束索引:

var str = "xxx_456";
var subStr = str.substring(str.length - 3, str.length);

答案 3 :(得分:5)

你可以将它拆分并获得最后一个元素

var string="xxx_456";
var a=string.split("_");
alert(a[1]); #or a.pop

答案 4 :(得分:2)

alert("xxxxxxxxxxx_456".substr(-3))

警告:根据mdc,不兼容IE

答案 5 :(得分:2)

一种疯狂的正则表达式方法

"xxx_456".match(/...$/)[0] //456

答案 6 :(得分:2)

这是我的自定义功能

function reverse_substring(str,from,to){
  var temp="";
  var i=0;
  var pos = 0;
  var append;      
  for(i=str.length-1;i>=0;i--){
    //alert("inside loop " + str[i]);
    if(pos == from){
         append=true;
    }

    if(pos == to){
         append=false;
         break;
    }
    if(append){
         temp = str[i] + temp;
    }
    pos++;
  }
  alert("bottom loop " + temp);
}

var str = "bala_123";
reverse_substring(str,0,3);

此功能适用于反向索引。

答案 7 :(得分:2)

字符串末尾任意位数的简单正则表达式:

'xxx_456'.match(/\d+$/)[0]; //456
'xxx_4567890'.match(/\d+$/)[0]; //4567890

或确实使用split / pop:

('yyy_xxx_45678901').split(/_/).pop(); //45678901

答案 8 :(得分:2)

String.prototype.reverse( ) {
     return Array.prototype.slice.call(this)
          .reverse()
          .join()
          .replace(/,/g,'')
}

使用反向字符串方法

var str = "xxx_456"
str = str.reverse() // 654_xxx 
str = str.substring(0,3) // 654 
str = str.reverse() //456

如果您的反向方法返回字符串,则链接方法以获得更清晰的解决方案。

答案 9 :(得分:2)

您还可以使用substringlastIndexOf-

获得结果
alert("xxx_456".substring("xxx_456".lastIndexOf("_")+1));

答案 10 :(得分:0)

尽管这是一个老问题,但支持user187291的答案

如果所需子串的长度固定,我将使用function getIBMT2S(word, wordFileType, cb) { ... // be sure to invoke cb in here } var passGetIBMT2S = util.promisify(getIBMT2S); // <-- don't call getIBMT2S, pass it in directly passGetIBMT2S(word, wordFileType) // <-- now invoke the wrapped function .then(result => console.log('DONE')); .catch(e => console.error(e)); 和负参数作为其简短易读的语法

substr()

目前,compatible是常见的浏览器,尚未严格弃用。