带有反向索引的子字符串


78

如何从“ xxx_不确定长度”的“ xxx_456”中提取“ 456”?


2
如果以一般的方式来表达该问题,它将更加有用:“如何在给定的分隔符的最后一次出现之后提取字符串的结尾?”。
Dan Dascalescu

Answers:


77
var str =“ xxx_456”;
var str_sub = str.substr(str.lastIndexOf(“ _”)+ 1);

如果不是始终以三位数结尾(并用下划线分隔)。如果结束定界符不总是下划线,则可以使用regex:

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

1
+1 lastIndexOf正是您想要的,比regex更快,比substr更灵活。
Phil H

7
@Phil:不能被测得更快,除非被数千次调用。您需要先致电给他们数百万次,以使差异明显。
2010年



5

您可以将其拆分并获取最后一个元素

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

1
+1,如果您没有提到,我会在我自己的答案中提供split-pop方法:-)
Andy E

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

警告:根据mdc,与IE不兼容


3
但是slice是-看到我的答案。
安迪E

3

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

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

或确实使用split / pop:

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

3
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

如果您的反向方法返回字符串,则将方法链接起来以获得更简洁的解决方案。


在哪个api中出现了reverse()方法?
Mike S.

@MikeS。如果有帮助,请+1
nf071590

2

疯狂的正则表达式方法

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

也可以是'xxx_456'.match(/_.+$/)[0]或'xxx_456'.replace(/(^.+_)(.+$)/,'$ 1')?
KooiInc 2010年

1
@Kooilnc:不必因为您可以而使正则表达式过于复杂。您的第一个示例还将与匹配_
Andy E

@Andy E:您对_是正确的。第二种可能性:$ 1应该是$ 2。
KooiInc 2010年

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);

此功能适用于反向索引。


这个复杂吗?我只是以相反的方式实现子字符串。而已。这就是用户从其标题中询问的内容。
编码器2010年

1
太复杂,只需使用"xxxxxxx_456".slice(-3)
tsukimi 2012年

2

您也可以使用substringlastIndexOf-获得结果

alert("xxx_456".substring("xxx_456".lastIndexOf("_")+1));

0

尽管这是一个老问题,但要支持用户的回答187291

如果所需子串的长度固定,我将使用substr()负参数作为其简短易读的语法

"xxx_456".substr(-3)

目前,它与常见的浏览器兼容,尚未严格弃用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.