JavaScriptの正規表現における「.(dot)」
FirefoxやOperaでは、正規表現の「.(dot)」は改行を除く任意の文字にマッチします(IEでは改行を含む任意の文字にマッチします)。ECMAScript(ECMA-262)では、「.」は改行を含まないことになっているので、規格通りの挙動と言えます。
では、改行を含むすべての文字にマッチさせたいときはどうすれば良いのでしょう?[\S\s]
のように書けば任意の文字にマッチしますが、あまりスマートな表現ではない気がします。
reflux flowのメモ。
FirefoxやOperaでは、正規表現の「.(dot)」は改行を除く任意の文字にマッチします(IEでは改行を含む任意の文字にマッチします)。ECMAScript(ECMA-262)では、「.」は改行を含まないことになっているので、規格通りの挙動と言えます。
では、改行を含むすべての文字にマッチさせたいときはどうすれば良いのでしょう?[\S\s]
のように書けば任意の文字にマッチしますが、あまりスマートな表現ではない気がします。
Posted by Rf at 22:59 | コメント (0) | JavaScript
この記事のURL: https://refluxflow.blogspot.com/2007/09/javascriptdot.html
JavaScriptの正規表現で、文字列リテラル(引用符「"」で囲まれた文字列、例えば、"abc")に一致するパターンを考えてみた。
/".*?"/
で済めば良いのだが、これでは文字列中にエスケープされた引用符(\")が存在する場合に対処できない。文字列を閉じる引用符の直前にバックスラッシュ(\)が無ければ良いと考えて/".*?[^\\]"/
としてみるも、今度はバックスラッシュがエスケープされていた場合(例えば、"abc\\")に対処できない。
試行錯誤の結果、/"(.*?[^\\])??(\\\\)*"/
という結論に至った。前半が「(...)??」という形になっているのは「""」や「"\\"」にもマッチさせるため。
コメントでもっと良い表現を教えていただきました。教えていただいたのはJavaの正規表現で、JavaScriptの正規表現リテラルに直すと/"([^\\"]|\\.)*?"/
となります。
上記の正規表現ですが、「[^\\"]
」の部分でエスケープされていない「"」を含まないようになっているので、「(...)*?
」のように「*?
」を使う必要はなく、「*
」で十分です。つまり、文字列リテラルに一致する正規表現は/"([^\\"]|\\.)*"/
となります。
Posted by Rf at 20:02 | コメント (2) | JavaScript
この記事のURL: https://refluxflow.blogspot.com/2007/09/blog-post.html
Posted by Rf at 20:06 | コメント (0) | Windows
この記事のURL: https://refluxflow.blogspot.com/2007/09/windows-xp.html
ドラッグ&ドロップされたすべてのファイルに対して処理を行うバッチファイルの書き方について。
バッチファイルのコマンドライン引数は%n
(nは0から9までの数字。ただし、%0
はバッチファイル自身)で参照できる。しかし、この方法では%1
から%9
の9つの引数しか扱えない。そこで、goto
コマンドを使ったループとshift
コマンドを用いて、すべてのコマンドライン引数を処理する。
:loop
if "%~1" == "" goto end
rem ここに%1に対して処理を書く。例えば次のように。
echo %1
shift
goto loop
:end
「echo %1
」のところに処理を記述する(ここでは単に%1の内容を出力しているだけ)。
コマンドライン引数が確実に1つ以上あるとわかっている場合は以下のようにも書ける。
:loop
echo %1
shift
if not "%~1" == "" goto loop
%1が空かどうかを判定するところで%~1
としているのは、%1の内容から引用符(")を取り除くため。そうしないと%1が引用符で囲まれている場合(例えば、空白文字を含むパスが渡されたとき)にうまく処理されない。
Posted by Rf at 17:47 | コメント (0) | Windows
この記事のURL: https://refluxflow.blogspot.com/2007/08/blog-post.html
移動しました。
Posted by Rf at 14:20 | コメント (0) | HTML
この記事のURL: https://refluxflow.blogspot.com/2007/03/htmlxhtml.html