2013-08-21 1 views
1

BBCode 스타일 편집기를 작성하는 중입니다. 기성품을 사용하는 것보다 우수한 이유가 있습니다. 나는 그 중 대부분이 올바르게 작동하지만 하나의 조건을 테스트해야합니다. 나는 자리로 사용하고 - 위의 당신이 한 순간에 볼로 오타가되지 않습니다 마크 업자바 스크립트를 둘러싼 텍스트를 확인하십시오.

[para=2] 
abc 
[/para] 
[para=0] 
123 
[/pa|ra] 

파이프 문자를 생각해 보자.

다음 사용자 조치는 - 내 버전 - 굵은 글씨 크기 태그 [굵게] [/ 굵게]를 삽입하는 것입니다. 내 코드는 사용자가 기존 텍스트 중 일부를 이미 선택했는지 여부에 관계없이이를 처리 할 수 ​​있습니다. 알파벳. ABC의 C 후의 변환 수율 [굵게] ABC [/ 굵은]

  • 캐럿 - -

    그러나

    1. ABC 선택한 다음 상황보고 변환하는 ABC를 산출 [굵게]/파이프에서 대담]
    2. 캐럿, |, 마지막에 뜯 [/ 파라] 현재

    내 코드 즐겁게 할것 반환 [PA | [대담] [/ 대담] 라].

    사용자의 선택 또는 현재 캐럿 위치가 내 마크 업 태그 중 하나에 완전히 들어 있지 않음을 분명히 밝히기 만하면됩니다. 이미 선택 항목이 마크 다운 태그와 겹치지 않는지 확인하는 코드가 있습니다. .

    나는 선택이 위치가 인하 태그 안에 있음을 감지 할 & 끝 위치 시작 "둘러보고"

    을 아마도 솔루션의 라인을 따라 뭔가를 할 필요가있을 것이다 - 단어 lookaround에서 알 수 있듯이 -이다 RegEx에서. 그러나 정규 표현식 기술은 매우 기본이므로 어떤 도움을 주시면 감사하겠습니다.

  • +1

    그때까지 마크 업이 유효하다는 것을 확인 했습니까? 이 경우 다음'['.] 앞에']'가 오는 지 확인하는 것만으로 충분합니다. –

    +0

    나는 당신이 제안한 것을 끝내기도했다. – DroidOS

    +0

    나는 대답을 할 것이다. –

    답변

    0

    , 당신은 찾을 수 있습니다 위치가 태그 안에있는 경우 ]이 다음 [ 앞에있는 경우

    (?![^\[]*\])... 
    

    아니면 탈출 마음에 들지 않을 경우,이 실제로 잘 작동 것 :

    (?![^[]*])... 
    

    하지만이에 당신은 아마 단순히 이러한 경우를 배제하기 위해 다음과 같은 내다하여 패턴을 수정할 수 있습니다 경우, 가독성은 다소 의문의 여지가 있습니다.

    +0

    죄송합니다. 왜이 대답을 받아들이 려하지 않았는지 확신 할 수 없습니다. – DroidOS

    1

    당신은 커서의 위치에 caret plugin 분할 텍스트 문자를 사용할 수 있으며 커서가 태그 내에있는 경우 테스트하기 위해이 정규 표현식을 사용하면 마크 업이 유효 알고 있다면

    var editor = $('.editor'); 
    var pos = editor.caret(); 
    var text = editor.val() 
    var before = text.substring(0, pos); 
    var after = text.substring(pos, text.length); 
    if (before.match(/\[[^\[]*$/) && after.match(/^[^\[]*\]/)) { 
        alert('inside'); 
    } 
    
    +0

    감사합니다. 캐럿 플러그인은 실제로 필요하지 않습니다. textarea.textRange 객체는 필요한 모든 정보를 제공합니다. 아마도 크로스 브라우저가 아니지만 누가 신경 써야할까요? Chrome에서만 작동해야합니다. – DroidOS

    관련 문제