正規表現 “[^]” の意味, 改行にもマッチする正規表現
JavaScript でヒアドキュメントするページで見つけた、
正規表現 [^]
の意味が分からなかったので調べてみた。
JavaScript でヒアドキュメント
こちらで見つけたコード。 Node.js が元ネタのよう。
環境依存かもしれないけど、面白い。
(function () {/*
<div class="title">
<h1>
<a href="${url}">${title}</a>
</h1>
</div>
*/}).toString().match(/[^]*\/\*([^]*)\*\/\}$/)[1];
このコードで使われてる正規表現 [^]
が見慣れなくて一瞬意味が分からなかった。
たぶん除外する文字がないだけ
[^abc]
は ‘a’, ‘b’, ‘c’ を除外した文字。
なので、 [^]
は除外する文字なしで何でも OK なのかなー。
記号なので Web 検索で調べにくい。
任意文字を示すドットとの違い
ドット .
は改行を除く一文字。
[^]
では改行は除かれないようだ。
// Chrome で確認
/./.test("\n"); // => false
/./.test("\r"); // => false
/[^]/.test("\n"); // => true
/[^]/.test("\r"); // => true
他の改行にもマッチする正規表現
改行にもマッチさせたいのなら、こんな方法もあった。
// Chrome で確認
/[\s\S]/.test("\n"); // => true
/[\s\S]/.test("\r"); // => true
[^]
は環境を選ぶっぽい
手元にあった ruby でも叩いてみたら SyntaxError でわろた。
IE でも動かなかったし、 [^]
は環境を選ぶっぽい。
irb(main):001:0> /[^abc]/
=> /[^abc]/
irb(main):002:0> /[^]/
SyntaxError: (irb):2: empty char-class: /[^]/
from /usr/local/bin/irb:12:in `<main>'
どうでもいいけど…
/[^_^]/
— Akihiro Kondo (@akkinoc) May 12, 2014
この正規表現が顔文字にしか見えない・・・。