2012-12-29 1 views
2

나는 커피 스크립트 코드의 다음 줄을 가지고 자신의 위치를 ​​이동하면서 HTML 블록의 기본적인 청소까지를 수행하는 (DCNT 및 sDesc 모두의 jQuery 객체)coffeescript 정규식에서 큰 따옴표를 어떻게 이스케이프해야합니까? 다음 자바 스크립트</p> <pre><code>dCnt.append(sDesc.html().replace(/<div/gi, '<p').replace(/</div>/gi, '</p>').replace /sstyle="text-align: center;"/gi, '') </code></pre> <p>이 출력 :

dCnt.append(sDesc.html().replace(/<div/gi, '<p').replace(/<\/div>/gi, '</p>').replace(/\sstyle="text-align: center;"/gi, '')); 

처음 두을 대체 어떤 문제를 일으킬 수 없지만, 내 마음에 드는에 대한 세 번째는 커피 스크립트 컴파일러에 대처할 수있는 일을 마련하기 위해 약간의 작업을 수행하고 있으며, 결과가 너무 제한하고 깨지기 쉬운.

지금까지 내가 발견 한 : 나는 마지막 주위에 괄호()가있는 경우

1) 커피 스크립트는 문자열로 따옴표를 해석하고 혼동 도착 후 교체 (그것은 슬래시 중 하나 해석 끝 부서로).

2) MATH 오류를 중지시키는 괄호를 제거하면 일반 표현식의 공백이 컴파일러를 혼동합니다. 위의 코드에서 \ s 대신 공백을 사용하는 출력은 혼란 스럽습니다. 마지막에 괄호) 교체 :

dCnt.append(sDesc.html().replace(/<div/gi, '<p').replace(/<\/div>/gi, '</p>').replace/(style = "text-align: center;"/gi), ''); 

교체가 괄호에 포함 된 세트에없는 경우에) 다음 공백을 코드에서 (즉, dCnt.append을 (제거합니다.) 및 별도의 줄에 그 처리 정규 표현식을 사용하면 컴파일러가 예기치 않은 ','오류를 발생하게됩니다 (이는 적어도 가비지 생성에 바람직합니다 ...).

괄호를 제거해야하므로 (coffeescript에서는 선택 사항이지만 코드 가독성을 크게 떨어 뜨리는 것으로 나타 났지만)이 문제로 인해 두 가지 함수 호출을 연결할 수는 없습니다.

누구나 jQuery 체인을 그대로 사용할 수있는이 문제에 대해 덜 취약한 솔루션을 생각해 낼 수 있습니까?

답변

1

문제는 이러한 졸이다 나타납니다 :

s.replace(/ /, '') 
s.replace//, '' 

는 커피 스크립트 컴파일러에 의해 모호한으로 간주 되 고 잘못 모호성을 해결합니다. 권리? 문제의 원인은 큰 따옴표가 아닌 슬래시 다음에 오는 공간입니다. CS는 다음을 본다 :

정규식 리터럴이 아닌 시도 된 분할. 그러나 :

/\/

은 단일 공백과 일치하는 정규식으로 해석됩니다.

나는 몇 작업 방법을 생각할 수 있습니다

  1. 사용 \s 또는 [ \t]. 나는 이것들이 단지 하나의 공간을 찾는 것보다 옳다고 생각한다. (물론 HTML 전체를 엉망으로 만든다.
  2. 앞 공간을 탈출하십시오 : /\ style.../. 실제로 정규식의 원시 공간보다 더 선호합니다.

답변이 많지 않으므로 (미안) 마음을 놓치지 않는 것일 수도 있습니다.

+0

내가 놓친 '마법'수정본이 없을 것이라는 의혹이있었습니다. coffeescript를 사용하는 과정에 대해 동등한 것으로 보입니다.이 프로젝트는 제가 처음 사용한 프로젝트이며 배심원은 소개하는 것보다 더 많은 문제와 비효율을 해결하는지 여부에 관해 여전히 많은 것을 알고 있습니다. –

+0

CS는 디버깅을 제외하고는 대단히 훌륭하지만 좋지 않은 부분은 Rails와 비슷합니다. (단, CS가 꽤 많이 평평한 동안 Rails를 사용할 때마다 "좋지 않은 부분"목록이 커집니다.) . –