역 색인이있는 부분 문자열


79

xxx의 길이가 무제한 인 "xxx_456"에서 "456"을 어떻게 추출 할 수 있습니까?


2
이 질문은 일반적인 방식으로 표현 된 경우 훨씬 더 유용 할 것입니다. "주어진 구분 기호가 마지막으로 발생한 후 문자열의 끝을 어떻게 추출 할 수 있습니까?"
Dan Dascalescu 2016

답변:


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

끝이 항상 세 자리가 아닌 경우 (밑줄로 구분). 끝 구분자가 항상 밑줄이 아닌 경우 정규식을 사용할 수 있습니다.

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

1
+1 lastIndexOf는 정규식보다 빠르며 substr보다 유연합니다.
Phil H

7
@Phil : 수천 번 호출되지 않는 한 측정 속도가 빠르지 않습니다. 차이가 눈에 띄기 전에 수백만 번 전화해야합니다.
outis


25

문자열 방법을 사용하면 시작과 끝 인덱스를 지정할 수 있습니다 :

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

5

당신은 그것을 분할하고 마지막 요소를 얻을 수 있습니다

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

1
+1, 당신이 그것을 언급하지 않았다면 내 대답에 스플릿 팝 방법을 제공했을 것입니다 :-)
Andy E

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

주의 사항 : mdc 에 따르면 IE와 호환되지 않습니다.


3
하지만 slice-내 대답을 참조하십시오.
Andy E

3

문자열 끝의 모든 자릿수에 대한 간단한 정규식 :

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

또는 실제로 분할 / 팝을 사용하십시오.

('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

역 메서드가 문자열을 반환하면 더 깨끗한 솔루션을 위해 메서드를 연결하십시오.


reverse () 메서드는 어떤 API에 표시됩니까?
Mike S.

@MikeS. 제발 한 경우이 도움이
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);

이 기능은 역 인덱스에 대해 작동합니다.


복잡한가요? 방금 역방향으로 부분 문자열을 구현했습니다. 그게 다야. 그리고 이것은 사용자가 그의 제목에서 요청한 것입니다.
coder

1
너무 복잡, 바로 사용"xxxxxxx_456".slice(-3)
츠 키미

2

또한 당신은 사용하여 결과를 얻을 수 있습니다 substringlastIndexOf-

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

0

이것은 오래된 질문이지만 user187291의 답변을 지원하기 위해

원하는 부분 문자열의 고정 길이의 경우 substr()짧고 읽기 쉬운 구문에 대해 음의 인수와 함께 사용 합니다.

"xxx_456".substr(-3)

지금은 일반 브라우저와 호환 되며 아직 엄격하게 사용되지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.