2016-06-19 2 views
-2

문자열에서 세 개의 숫자 값을 가져 오기 위해 JavaScript match() 함수를 사용하려고합니다.JavaScript match() regex가 예상대로 작동하지 않습니다.

문자열의 예 : doSomething(14754572,782339,2,'')

그리고 여기 내가 사용 자바 스크립트입니다,하지만 결과 :

var $numbers = $onclick.match(/(\d*),(\d*),(\d)/); 
var first = $numbers[0] // Should be 14754572 
var second = $numbers[1] // Should be 782339 
var third = $numbers[2] // Should be 2 

내가 정규식이 확인되지 같은데요 ...

+1

[올바른] (https://regex101.com/r/rS3aP9/ 1). 당신은 * first *를 쓰고 전체 일치 값을 포함하는'[0]'그룹에 접근합니다. 색인이 예상 결과와 일치하는 https://jsfiddle.net/mz900rfb/을 참조하십시오. –

+0

새로운 Reg를 정의하고 .match를 찾았습니까? – abdoutelb

답변

4

정규 표현식은 괜찮습니다. 일치 배열에 대한 색인이 올바르지 않습니다. 첫 번째 항목 인 [0]전체과 일치하는 텍스트입니다 (귀하의 경우 "14754572,782339,2"). 그런 다음 정의한 캡처 그룹을 [1], [2][3]으로 지정합니다. 따라서 이러한 인덱스를 조정하면됩니다. 당신이 거기에 \s*을 추가하는 것을 고려 할 수 있도록

var $onclick = "doSomething(14754572,782339,2,'')"; 
 
var $numbers = $onclick.match(/(\d*),(\d*),(\d)/); 
 
console.log($numbers[1]); // 14754572 
 
// Note ------------^^^ 
 
console.log($numbers[2]); // 782339 
 
// Note ------------^^^ 
 
console.log($numbers[3]); // 2 
 
// Note ------------^^^

그냥 FWIW는, 그 정규식, 옵션 공백의 허용하지 않습니다; 또한, 나는 최고의 ( 필요로를 업데이트 할 수 있습니다 :

// Leading (------------------vv 
var $numbers = $onclick.match(/\(\s*(\d*)\s*,\s*(\d*)\s*,\s*(\d)/); 
// Optional whitespace ----------^^^-----^^^-^^^-----^^^-^^^ 
0

을 당신은 당신이 정규식의 모든 일치로 평가 것을 확인할 수 있습니다 $ 번호를 기록합니다. 따라서이, 당신이해야 할 것은, 1과 2를 인덱스 1, 2, 3을 선택하는 대신 0입니다 : 정규식은

var $numbers = $onclick.match(/(\d*),(\d*),(\d)/); 
var first = $numbers[1] // Returns 14754572 
var second = $numbers[2] // Returns 782339 
var third = $numbers[3] // Returns 2 
console.log('1:'+first,' 2:'+second,' 3:'+third); 
관련 문제