2012-04-22 2 views
1

하나의 classname을 다른 class로 대체하는 javascript 함수를 생성하려고합니다. 내가대괄호 안에 Javaxcript 정규식 메타 문자가 작동하지 않습니까?

<div class="one" onclick="foo(this)"></div>​ 

같은 마크 업에

function foo(bar) 
{ 
    bar.className=bar.className.replace(/\bone/, "two"); 
}​ 

같은 기능을 사용할 때 제대로 찾아 twoone을 대체합니다. 그러나 괄호를 사용하여 one 앞에 올 수있는 다른 문자를 포함하는 경우 \b은 문자열의 시작을 인식하지 못하고 일치하는 항목을 제공하지 않습니다. 예 :

function foo(bar) 
{ 
    bar.className=bar.className.replace(/[\b\s]one/, "two"); 
}​ 

이 작동하지 않습니다. 심지어 /[\b]one/도 작동하지 않습니다.

실제 작동 상태를 보려면 http://jsfiddle.net/E4ph5/을 참조하십시오. 내가 도대체 ​​뭘 잘못하고있는 겁니까? (피들에서 대괄호를 제거하면 스크립트가 제대로 작동합니다.)

답변

3

대괄호는 문자 클래스를 정의합니다. 이러한 클래스 안에서는 \b (단어 경계)과 같은 마커는 의미가 없으므로 작동하지 않습니다.

/\bone/ 어쨌든 공백은 단어 경계입니다 : http://jsfiddle.net/ThiefMaster/Z8HTE/ - 일치를 피하기 위해 /\bone\b/을 사용하여 향상시킬 수 있습니다. class="onetwothree"

+0

그냥'\ b'을 사용하는 것이 좋은 점, 나는 그 사실을 알아 차리지 못했습니다. –

관련 문제