2009-06-11 11 views
4

簡単な方法があります変更 javascriptで一致する文字列の場合?Javascript replace()with case-change

文字列:<li>something</li>

正規表現:/<([\w]+)[^>]*>.*?<\/\1>/

そして、私は何をしたいのですが(可能であれば交換してください内)すべて大文字に試合に$ 1置き換えです。 $ 1が有効な一致で、文字列でないときは完全にはわかりません - '$ 1'。toUpperCaseは機能しません。

返信についてはどうすればよいですか<LI>something</li>?このメソッドは、正規表現ではありません。

答えて

12

リプレースメソッドにreplaceメソッドを渡すことができます。最初の引数は完全一致で、2番目の引数は$ 1です。したがって:

mystring.replace(/<([\w]+)[^>]*>.*?<\/\1>/, function(a,x){ 
    return a.replace(x,x.toUpperCase()); 
}) 

このフォームは、追加のキャプチャ(速くする必要がありますが、チェックしていない)ことによって、余分な操作が保存されますが:

mystring.replace(/<([\w]+)([^>]*>.*?<\/\1>)/, function(a,x,y){ 
    return ('<'+x.toUpperCase()+y); 
}) 
+0

パーフェクト:) Thanks! –

0

最も簡単な正規表現マッチを使用して、使用することが考えられますが.toUpperCaseを試合に出してください。正規表現を少し変更して2番目のキャプチャグループに追加しました

var str = '<li>something</li>'; 
var arr = /<([\w]+)([^>]*>.*?<\/)\1>/.exec(str); 
str = '<' + arr[1].toUpperCase() + arr[2] + arr[1].toUpperCase() + '>';