2012-10-19 3 views
0

내부에 정수를 가져 오는 문자열이 있습니다. 내가 2 것을 그랩 할 필요가안쪽에서 괄호 안의 정수를 구하십시오.

"(2) This is a string"

: 같은 문자열이 보인다. 하지만 숫자가 될 수 있으므로 시도 :

var str = "(2) this is a string"; 
var patt = /\(\d\)/; 

var num = str.match(patt); 

이것은 정답을 반환하지 않습니다. ()에서 분할해야하나요, 아니면 더 나은 정규 표현식이 있습니까?

+0

이 숫자는 항상 하나의 괄호 안에 될 것입니다 작동합니다 얼마나 많은 괄호

var str = "(2) this is a string"; var patt = /\(\d\)/; var num = str.match(patt)[0].replace("(", "").replace(")","") 

나던 문제? 아니면 이중 괄호가있을 수도 있고 번호가 어딘가에있을 수도 있습니까? –

답변

2
var str = "(2) this is a string"; 
var patt = /\((\d)\)/; 

var num = str.match(patt)[1]; 

2 가지. 일치하는 문자열을 세그먼트 형식으로 캡처하려면 ()을 사용하십시오. 그래서 나는 그것을 붙잡기 위해서 단지 \d을 포장했습니다.

두 번째, 캡처 된 세그먼트에 액세스하려면 반환 된 배열로 드릴해야합니다. match 메서드는 첫 번째 항목이 전체 일치 문자열이고 두 번째 항목이 일치하는 캡처 그룹 인 배열을 반환합니다. 그래서 (배열의 두 번째 항목)이 작동

+0

이 둘 이상의 숫자로 작동합니까? 1 일 수도 있지만 100 일 수도 있습니다. – Psyllex

+0

'(\ d)'는 한자리 숫자와 일치하고 캡처합니다. '(\ d +)'는 하나 이상의 숫자와 일치합니다. '+'는 하나 이상의 이전 토큰을 말합니다. –

+0

달콤한 고마워요! – Psyllex

0
var str = "(2) this is a string"; 
var patt = /\((\d+)\)/; 
alert(str.match(patt)[1]); 

를 첫 번째 캡처 그룹을 가져 [1]를 사용!

왜 작동합니까? (()) 내부에는 matches 배열의 [1] 요소를 채우는 캡처가 있기 때문에.

+1

아니요 ... 문자열 안에 표현식이있는 경우에만. –

+0

@Claudrian 왜 그렇게할까요? 왜냐하면 그렇게하지 않기 때문입니다. –

+0

@FelixKling True. – CodeAngry

0

사용하십시오. 이

0
var str = "(2) this is a string"; 
var a = /\([\d]*\)/g.exec(str)[0]; 
var num = a.substring(1, a.length-1); 
관련 문제