2016-10-01 6 views
0

일부 특정 문자에 표현식을 분할하려고합니다. 나는 우리가 정규식 사항 String.split()를 사용할 수 있습니다 알고, 그래서 이것은 나의 첫번째 추측이었다JS 문자열을 정규식으로 분할

function expressionSplit([input]) { 
 
    let regex = /([(),;.]+)/g; 
 
    let arr = input.split(regex); 
 

 
    arr.forEach(item => console.log('item: ' + item)); 
 
} 
 

 
expressionSplit(['let sum = 1 + 2;if(sum > 2){\tconsole.log(sum);}']);

지금이 내가 기대했던 어디에도 없다, 그래서 나는 좀 더 많은 독서를했고, 발견 사람들은 나와 달리 문제없이 정규식으로 split()을 사용한다. 의아해,이 시도 : 내 기대에

function expressionSplit([input]) { 
 
    let regex = /([(),;.]+)/g; 
 
    let arr = input.replace(regex, '|').split('|'); 
 

 
    arr.forEach(item => console.log('item: ' + item)); 
 
} 
 

 
expressionSplit(['let sum = 1 + 2;if(sum > 2){\tconsole.log(sum);}']);

그리고 반대를 - 그것은 일, 대부분. 왜 이런 일이 생길까요? 내가 말했듯이, 그것은 나에게 전혀 이해가 안되기 때문에 일종의 JS- 전형적인 oddness 일 것이다. 다른 사람들은 split()을 문제없이 정규 표현식과 함께 사용하는 것 같다. 또한 어떻게 '\ t'(탭)로 나눌 수 있습니다. regex에 '\ t'를 추가하는 것은 아무 것도하지 않는 것처럼 보이고 '\\ t'는 't'에만 매치됩니다. 감사.

답변

1

여기에 "JS- 전형적인 이상함"이 없습니다. 이것은 모두 문서화 된 동작입니다. JS의 이상함에 대해 불평하기를 원한다면, 자네는 파티에 좀 늦다. 자바 스크립트가 자라면서 몇 년 전에 스타일이 바뀌었다. String#split의 문서에서

:

세퍼레이터 각 시간 분리가 일치, 캡처 괄호 (미정 결과 포함) 결과는에 접합되어 캡처 괄호를 포함하는 정규 표현이면 출력 배열. 그러나 모든 브라우저가이 기능을 지원하지는 않습니다.

그룹화 연산자를 사용 중이므로 분할되는 토큰뿐만 아니라 분할되는 토큰이 결과에 나타납니다. 분할 토큰을 제거하면 원래 예상대로 작동합니다.

// old:  /([(),;.]+)/g; 
let regex = /[(),;.]+/g; 
+0

답변 해 주셔서 감사합니다. 나는 불평하지 않았고 JS를 공격적으로하는 것을 의미하지 않았으므로 방어를받을 필요가 없습니다. D. 하지만 JS만큼이나 유연하다는 것은 부인할 수 없습니다. 표준 프로그래밍 언어와 비교할 때 매우 흥미롭거나 이상하지는 않은 기능이 있습니다. – Alex

+0

수비가되어서 죄송합니다. 자바 스크립트는 오랜 시간 동안 구멍을 뚫어 놓은 가방이었습니다. 나는 JavaScript가 다른 언어보다 불균형 적으로 더 많은 단점을 가지고 있다고 동의한다; 모든 언어는 이상하고 제도화 된 특이성을 가지고있다. –

+0

전체 공개 : 나는 "싫은 사람"이기도했다. 그러나 그것이 언어를 정말로 알기도 전에였습니다. 자바 스크립트가 이전 버전과의 호환성 문제 ('typeof'를 보았습니다.)에 잘못 되었다면, 목적과 역사를 감안할 때 정말로 비난 할 수 있습니까? –

관련 문제