似たようなサービスはすでにいくつもあるのですが、某所の宿題を片付けるため習作として作りました。

Regexp:
Options:
g i m
String:

JavaScriptのソースはentry末に

特に知りたかったのが、.の挙動。どうもJavaScriptには、Perlのsオプション相当がないので、.は常に「改行以外の全ての文字にマッチする」の意味しか持たせられないようです。.+と入れてやってみてください。最初の行だけがマッチするはずです。

回避策として、[\S\s]+というものが使えるようですが....

あと、$の意味がオプションによって変わってきますが、これまたPerlの\z相当、すなわち「問答無用で文字列終端にマッチ」するもないようです。

Enjoy!

Dan the JavaScripting Regular Expressionist

See Also:

(function(){
    var $ = function(id){ return document.getElementById(id) };
    var entities = { '<':'lt', '>':'gt', '&':'amp', '\"':'quot' };
    var encode_entities = function(str){
        return str.replace(/[<>&\"]/g, function(m0){
            return '&' + entities[m0] + ';' ;
        });
    };
    var make_regexp = function(){
        var pat = $('regexp').value;
        var opt = '';
        if ($('rx_g').checked) opt += 'g';
        if ($('rx_i').checked) opt += 'i';
        if ($('rx_m').checked) opt += 'm';
        try{
            return new RegExp(pat, opt);
        }catch(e){
            $('result').innerHTML = e;
            return;
        }        
    };
    run_regexp = function(){
        var re = make_regexp();
        if (!re) return;
        var result = $('string').value.replace(re, "\x02$&\x03");
        $('result').innerHTML = encode_entities(result)
            .replace(/\x02/g, '<span class="rxmatch">')
            .replace(/\x03/g, '</span>');
    }
})();