2009-06-24 3 views

답변

3

클래스 이름을 찾는 것처럼 보입니다.

줄 바꿈 또는 공백 문자 (^|\s)의 시작과 일치시키고 클래스 이름 다음에 공백 또는 줄 끝 ($|\s)이 올 수 있습니다.

1

공백으로 구분 된 목록에서 classname의 내용을 찾습니다. DOM 요소의 className 속성을 구문 분석 한 것으로 보입니다.

1

시작 부분 (^) 또는 앞에 공백 (\\s)이 있고 그 뒤에 공백 또는 끝 ($)이 오는 클래스 이름과 일치합니다.

0

첫 번째 부분은 공백이나 문자열의 시작 부분과 일치합니다. 마지막 조각은 비슷하게 공백이나 문자열의 끝과 일치합니다. 이것은 "foo"의 클래스 이름에 대한 검사가 클래스 이름이 "foobar"인 요소와 일치하지 않도록하기 위해서입니다.

11
(   Either 
^    the start of the string 
|    or 
    \\s+   one or more whitespace characters 
)    followed by 
className  the class name in question 
(   followed by either 
    \\s+   one or more whitespace characters 
|    or 
    $    the end of the string 
) 

그래서에서 "POG"를 일치 :

"pog" 
" pog" 
"pog " 
"pog bim" 
"bim pog" 
" pog bim" 
"bim pog " 
"bim pog pam" 

new RegExp()의 두 번째 인수는 예를 들어, 옵션을 제공 할 수 있습니다. "i"는 "대소 문자를 구분하지 않음"을 의미합니다. 귀하의 경우에는 어떤 옵션도 전달하지 않습니다 (HTML 클래스 이름을 다루는 경우 올바른 - 클래스 이름은 대소 문자를 구분하여 처리해야합니다).

+0

나는 이것도 룩백을 위해 괄호 안의 내용을 트랩한다고 믿는다. –

+1

@Tom - 정확함. ? :로 일치 패턴 캡처를 방지하기 위해 하위 패턴을 수정할 수 있지만,이 경우에는 실제로 필요하지 않습니다. –

+0

+1, 와우, 너희들은 완전히 새로운 수준으로 가져 갔다 – cgp

5

RichieHindle은 훌륭한 답변을 제공합니다. 이 패턴의 목적에 대한 정보를 추가하고 싶었습니다.

요소에 지정된 CSS 클래스가 있는지 확인하는 경우 오탐 (false positive)을 방지해야합니다. 당신의 정규 표현식 다음이

var pattern = new RegExp(className); 

클래스 "는 foobar"인 요소처럼 너무 단순하면 클래스 "foo는"에 체크를위한 양성 것입니다. 이러한 경계 서브 패턴은 이러한 유형의 시나리오를 방지하기 위해 여기에 존재합니다. 작동중인 데모가 있습니다.

<div id="test1" class="red big">My class is "red big"</div> 
<div id="test2" class="red-and-big green">My class is "red-and-big green"</div> 
<textarea id="output" rows="10" cols="60"></textarea> 

<script type="text/javascript"> 

    var ta = document.getElementById('output'); 
    var test1 = document.getElementById('test1'); 
    var test2 = document.getElementById('test2'); 

    function hasCssClass(classList, className) 
    { 
     var pattern = new RegExp("(^|\\s+)" + className + "(\\s+|$)"); 
     return pattern.test(classList); 
    } 

    function testElement(elem, className) 
    { 
     var has = hasCssClass(elem.className, className) 
     ta.value += elem.id + ' ' + (has ? 'has' : 'does not have') + ' ' + className + "\n"; 
    } 

    testElement(test1, 'red'); 
    testElement(test1, 'green'); 
    testElement(test1, 'big'); 
    testElement(test1, 'red-and-big'); 

    testElement(test2, 'red'); 
    testElement(test2, 'big'); 
    testElement(test2, 'green'); 
    testElement(test2, 'red-and-big'); 


</script> 
+0

+1 : 좋은 데모! – RichieHindle

+0

+1, 와우, 네가 완전히 새로운 수준으로 가져 갔어. – cgp

관련 문제