2009-12-03 4 views
17

Douglas Crockfords Javascript: The Good Parts을 읽고 있는데 방금 정규식 장을 마쳤습니다. 이 장에서는 그가 자바 스크립트의 \b, 긍정적 예측 (?=)과 부정적 예측 (?!)"안 좋은 부분"자바 스크립트 : 좋은 부품; 왜 선견지명이 좋지 않은가?

그는 \b이 좋지 않은 것에 대한 이유는 설명 호출 (이 단어 경계 찾기위한 \w 사용하고 \w는 실패 유니 코드 문자를 사용하는 언어), 그것은 나에게 아주 좋은 이유처럼 보입니다.

불행히도 긍정적이고 부정적인 선견지명이 좋지 않은 이유는 빠뜨리고 하나도 만들 수 없습니다. Mastering Regular Expressions은 저에게 미리보기와 함께 제공되는 힘을 보여 주었지만 (물론 그것이 가져 오는 문제점을 설명해줍니다), "좋은 부분이 아닙니다"라고 여길만한 것을 생각할 수는 없습니다.

JavaScript (양수 | 음수) 미리보기 또는 (양수 | 음수) 미리보기가 일반적으로 "좋지 않음"으로 간주되어야하는 이유를 설명 할 수 있습니까?

나는이 질문이있는 유일한 사람이 아닌 것 같습니다 : onetwo.

+1

내가 그 문장을 읽었을 때 나는 그것을 봤고, 이걸 생각해 냈다. 매우 이상한 - 그가 말하는 모든 것이 완벽하게 이해되며, 그는 항상 사물이 "나쁘다"고 말하는 이유를 거의 설명합니다. – Skilldrick

+1

@Skilldrick에 동의합니다. Crockford는이 책에서 거의 모든 점에 대한 그의 추론을 설명하는 데 정말 능숙했지만이 경우에는 전혀 설명하지 않습니다. 나도 아무런 설명도 찾지 못하고 봤는데 여기서 끝났어. 나에게 긍정적/부정적 예측은 그들이 어떻게 작동하는지 그리고 부적절하게 사용되면 성능에 미칠 수있는 잠재적 인 부정적인 영향을 이해하는 한 대단하다. – Chev

답변

10

: 그런데

는 (긍정적 | | 음수) (예상 검색은 lookbehind)은 때로는 집단적으로 다양한 구현 중 기능의 지원을 비교하여이 페이지로, "lookaround"라고 인터넷 익스플로러의 perpetually buggy implementation of lookaheads 때문일 수 있습니다. 자바 스크립트에 관한 책을 저작하는 사람이라면 IE에서 작동하지 않는 기능은 존재하지 않을 수도 있습니다.

+9

Crockford 씨가 이걸 썼을 때 무슨 생각을하고 있었는지 모르겠지만, 이것이 자바 스크립트에서 미리보기를 조심하는 가장 좋은 이유 인 것 같습니다. 버기 구현을위한 언어를 비난하는 것은 다소 불공평하다고 느낍니다. –

+6

기억하십시오 : JavaScript는 node.js가 증명하는 것처럼 웹 외부에서 사용할 수 있습니다! –

+1

틀림없이! 하지만 자바 스크립트를 기억하십시오. node.js가 나오기 전에 훌륭한 부분이 작성되었으므로 여전히 최상의 답을 얻을 수 있습니다. –

2

너무 어렵습니다.

또는 lookaheads 및 lookbehinds (후자는 JavaScript에서 지원되지 않음)는 정규식 시간을 상당히 늘립니다. 하지만 일반적으로 자바 스크립트에서 엄청난 양의 데이터를 재조정하는 것은 아닙니다. 그래서 그들은 훌륭합니다. 유용 할 때 사용하십시오.

+1

너무 어려울 것 같지 않습니다 ... 성능이 이유 일 수는 있지만 언어 사양 문제보다 해결할 수있는 통역사 문제가 더 많습니다. –

+3

"너무 열심히"조금은 심각하지 않았습니다. 그러나 통역관 문제는 언어 기능을 피해야한다고 말하는 것은 옳은 것처럼 보입니다. 그러나 다시 한번, 나는 Crockford와 피할 가치가있는 선견지자를 만드는 어떤 종류의 문제가 있다는 것에 동의하지 않을 것입니다. 둘러보기가 환상적입니다. –

+4

Crockford는 똑똑한 사람입니다. 나는 그가 왜 lookaheads가 나쁘다고 결론을 내렸는 지 아무도 잘 모른다는 것을 알았습니다. 그래서 나는 그에게 이메일을 보냈습니다.그가 대답한다면, 나는 여기에 올리겠습니다. –

3

제가 생각할 수있는 유일한 이유는 범용 정규식 엔진의 약 절반에서만 지원된다는 것입니다.하지만 당신이 보편적으로 지원되는 구문으로 제한한다면, 당신은 할 수없는 많은 것들이 있습니다.

http://www.regular-expressions.info/refflavors.html

+3

나는 그 방향으로 생각하고 있었지만, 일반적으로 지원 부족은 실제로 그것을 지원하는 특정 언어의 나쁜 부분으로 그것을 한정하지는 못했다. –

관련 문제