2012-04-22 3 views
1

私はあるクラス名を別のクラス名に置き換える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'を使うことについての良い点は、気付かなかったことです。 –

関連する問題