2017-02-09 1 views
0

나는 split에 대해 읽고 있는데, 아래는 문자열 값을 보는 변수이다. 그러나 나는 상징이 찾고있는 것을 이해하지 못한다.괄호 캡처 -/( d) /? 또는/ s *; s * /?

페이지에 따르면 : 구분 기호에 캡처 괄호가 포함되어 있으면 일치하는 결과가 배열에 반환됩니다.

var myString = 'Hello 1 word. Sentence number 2.'; 
    var splits = myString.split(/(\d)/); 

    console.log(splits); 

    // Results 
    [ "Hello ", "1", " word. Sentence number ", "2", "." ] 

내 질문은 무엇입니까? 괄호 "("또는 ")"는 문자열의 일부가 아닙니다. 우주 란 무엇인가? 다른 사람이 아니라 다른 사람을 위해 분리 되었습니까?

또 다른 하나는/\ s의 *; \이야 *

미국 0 또는 더 많은 공간이있는 경우는 전후 세미콜론을 제거합니다. 이것은/\ s *가 공간을 찾고 제거한다는 것을 의미합니까? 이 경우 분리 기호입니까?

var names = 'Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ;Chris Hand '; 

    console.log(names); 

    var re = /\s*;\s*/; 
    var nameList = names.split(re); 

    console.log(nameList); 

    // Results 
    ["Harry Trump", "Fred Barney", "Helen Rigby", "Bill Abel", "Chris Hand "] 

그렇다면 왜하지 않습니다/\ s의 *^\ s의 */remobe 공간 이전과 내 문자열이처럼 보였다 경우^기호 다음에.

var names = 'Harry Trump ^Fred Barney^ Helen Rigby^Bill Abel ^Chris Hand '; 

    console.log(names); 

    var re = /\s*^\s*/; 
    var nameList = names.split(re); 

    console.log(nameList); 

나는 상징의 의미와 왜 그들이 어떤 순서로 된 것인지 알고 싶다. 감사합니다.

+0

그것은 당신이 알고 싶은 나에게 분명하지 않다. 정규 표현식을 읽는 법을 모르십니까? '(\ d)'는 한자리 숫자와 일치하는 캡쳐 그룹입니다. 문자열에는 '1'과 '2'두 자리가 있습니다. 문자열이 분할되어 있으면 '1'이전, '1'과 '2'사이 및 '2'뒤에서 내용을 가져옵니다. * "제 질문은 여기 무슨 일입니까?"* 정확하게 인용 한 내용 : * "분리 기호에 캡처 괄호가 있으면 일치하는 결과가 배열에 반환됩니다."* –

+0

'/ \ s *^\ s * /'is is doing '^ '는 줄의 시작을 나타내는 특수 문자이기 때문에 기대하는 것. "^"문자 자체와 일치 시키려면 먼저 \/\ s * \^s * /' –

+0

* "을 입력해야합니다. 전후에 공백을 넣으십시오. "*'^'는 리터럴 의미를 원한다면 특수 문자입니다 :'\ ^' – zer00ne

답변

1

예제가 here 인 것 같습니다.

먼저이 하나를보십시오. /(\d)/. 내부 작업으로 \d이 모든 숫자를 이스케이프 처리하는 것으로 인식합니다. 이제 기사에서 이스케이프 주위에 괄호를 래핑하면 split 메소드가 반환 된 배열의 구분 기호 (이 경우 임의의 숫자)를 유지하도록 지시합니다. 괄호 없이는 리턴 된 배열은 숫자 요소 (물론 문자열)를 가지지 않을 것입니다. 마지막으로 슬래시 (//)로 묶어 regular expression을 만듭니다. 기본적으로이 경우는 다음과 같습니다. 문자열을 숫자로 분리하고 반환 된 배열에 숫자를 유지합니다.

두 번째 경우 /\s*;\s*은 좀 더 복잡하며 정규 표현식을 약간 이해합니다. 먼저 \s이 공백을 이스케이프 처리합니다. 정규 표현식에서 문자 c 다음에 *이 나오면 'c 0 개 이상을 연속적으로 찾습니다'라고 말합니다. 따라서이 정규 표현식은 ' ; ', ';' 등의 문자열과 일치합니다 (공백을 표시하기 위해 작은 따옴표를 추가했습니다). 이 경우 괄호가 없으므로 세미콜론은 반환 된 배열에서 제외됩니다.

아직도 걸려 있다면 정규 표현식에 대해 읽고 연습하는 것이 좋습니다. 이 website은 위대합니다. 해당 사이트의 정규 표현식이 구문에있어서 JavaScript에서 사용되는 것과 약간 다를 수 있다는 사실에 피곤할 수 있습니다.

+1

* "'\ d'는 모든 숫자를 이스케이프합니다. * 이스케이프? –

+0

거룩한 암소! 귀하가 제공하는 웹 사이트는 매우 유용합니다. 나는 몰랐다. 그것에 지금 읽는. 내 운동은 아직 내게 이것을 가르쳐주지 못했다. 다들 감사 해요! 나는 투표를 할 것이나 내 평판은 너무 낮다. – OatmealForever

+0

글쎄,'\ d'가 문자열에서 새 줄을 이스케이프 처리하는 것과 같은 방식으로 숫자를 이스케이프 처리한다고 가정했습니다. 또는 어떻게 캐럿 (^) 정규식 내에서 이스케이프해야합니다. 그럼에도 불구하고 그것이 혼란을 일으켜서 어떻게 재현되는지를 봅니다 :'\ d'는 어떤 숫자와도 일치하는 짧은 손입니다. –

0

아래 첫 번째 예는 입력 문자열을 임의의 숫자로 분할하여 최종 배열에 구분 기호 (즉, 숫자)를 유지합니다.

아래의 두 번째 예는 괄호를 치우지 않고도 배열을 임의의 숫자로 분할하지만 해당 숫자 구분 기호는 최종 배열에 포함되지 않음을 보여줍니다.

아래의 세 번째 예는 가능한 한 연속 된 공백 (none 포함)과 그 다음에 가능한 한 많은 연속 공백이 바로 뒤에 오는 세미콜론 (none 포함)을 포함하여 다음 패턴이 발생할 때마다 입력 문자열을 분할합니다. .

아래의 네 번째 예는 세 번째 예와 비슷한 입력 문자열을 실제로 나눌 수 있지만 "^"는 ";"을 대체 할 수 있음을 보여줍니다. 그러나 "^"자체가 "문자열의 시작"을 의미하기 때문에 JavaScript 앞에 실제 "^"를 찾으려면 백 슬래시 (즉,이 목적으로 지정된 특수 표시기)를 앞에 붙여야합니다. 즉 "\ ^".

const show = (msg) => {console.log(JSON.stringify(msg));}; 
 

 
var myString = 'Hello 1 word. Sentence number 2.'; 
 
var splits1 = myString.split(/(\d)/); 
 
show(splits1); 
 
var splits2 = myString.split(/\d/); 
 
show(splits2); 
 

 
var names1 = 'Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ;Chris Hand '; 
 
var nameList1 = names1.split(/\s*;\s*/); 
 
show(nameList1); 
 
var names2 = 'Harry Trump ^Fred Barney^ Helen Rigby^Bill Abel ^Chris Hand '; 
 
var nameList2 = names2.split(/\s*\^\s*/); 
 
show(nameList2);

관련 문제