-->
./
<!-- フラ&#65533;ュが見れな&#65533;のためにここに何か書&#65533; --> フラ&#65533;ュがインス&#65533;&#65533;ルされて&#65533;&#65533;たいで&#65533;&#65533;&#65533;

2010年03月29日

scanメソッドのパターンマッチ

【連載】いまからはじめるPrototype.js (2) 数値と文字列の拡張メソッド | エンタープライズ | マイコミジャーナル

'文字列'.scan( パターン, function( match ) {
  // パターンに合致した部分(match)を用いた処理
} );

いずれもパターンは文字列か/正規表現/という形式で記述する。sub()は文字列中のパターンに合致した部分のうち、最初から指定された回数(デフォル トは1)だけ文字列を置き換える。gsub()はすべての合致した部分を指定された置き換える。置き換え後の文字列を表す際に、$1にあたる部分を# {1}のように記述する。

scan()はパターンに合致した部分が出現すると関数が実行される。関数の引数matchは、match[ 1 ] == $1, match[ 2 ] == $2, ...となる。


 変わったの挙動の関数なので、いろいろ試してみました。

js> function aaa(s){
s.scan( /.*(\d+)/, function( match ) {
print(match[1] + ('+++') + '
');
});}  >   >   >
js> aaa("w123 f f345")
5+++

js> function aaa(s){
s.scan( /.*(\d+)/, function( match ) {
print(match[0] + '---' + match[1] + '+++' + '
');
});}  >   >   >
js> aaa("w123 f f345")
w123 f f345---5+++

js> function aaa(s){
s.scan( /.*(\d+)/, function( match ) {
print(match.join('+++') + '
');
});}  >   >   >
js> aaa("w123 f f345")
w123 f f345+++5

js> function aaa(s){
s.scan( /.*([0-9]+)/, function( match ) {
print(match.join('+++') + '
');
});}  >   >   >
js> aaa("w123 f f345")
w123 f f345+++5

js> function aaa(s){
s.scan( /.*(\d+)/, function( match ) {
print(match[2] + '---' + match[1] + '+++' + '
');
});}  >   >   >
js> aaa("w123 f f345")
undefined---5+++


js> function aaa(s){
var a=[];
a=s.scan( /.*([0-9]+) .*(\d+)/, function( match ) {
a.push(match);
});
return a;}  >   >   >   >   >
js> xxx=aaa("a 8 ki8 8 a 00 9 x9 9")
a 8 ki8 8 a 00 9 x9 9
js> xxx
a 8 ki8 8 a 00 9 x9 9
js> xxx.inspect

function (useDoubleQuotes) {
    var escapedString = this.gsub(/[\x00-\x1f\\]/, function (match) {
        var character = String.specialChar[match[0]];
        return character ? character : "\\u00" + match[0].charCodeAt().toPaddedString(2, 16);
    });
    if (useDoubleQuotes) {
        return "\"" + escapedString.replace(/"/g, "\\\"") + "\"";
    }
    return "'" + escapedString.replace(/'/g, "\\'") + "'";
}

js> xxx.inspect()
'a 8 ki8 8 a 00 9 x9 9'
js> a=["x","y","z"]
x,y,z
js> a.inspect()
['x', 'y', 'z']
js> a.inspect

function () {
    return "[" + this.map(Object.inspect).join(", ") + "]";
}

js> xxx=[];

js> xxx=aaa("a 8 ki8 8 a 00 9 x9 9")
a 8 ki8 8 a 00 9 x9 9
js> xxx
a 8 ki8 8 a 00 9 x9 9
js> 




posted by hirono at 02:44| Comment(0) | TrackBack(0) | prototype.js
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/36737966

この記事へのトラックバック