似たようなサービスはすでにいくつもあるのですが、某所の宿題を片付けるため習作として作りました。
- 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>');
}
})();
このブログにコメントするにはログインが必要です。
さんログアウト
この記事には許可ユーザしかコメントができません。