正規表現に挑戦 |
作成日:2002-12-03 最終更新日: |
英語を覚えるために、正規表現を用いた単語リストを出してみることにした。 正規表現の欄に正規表現を入れると、その正規表現に合致した単語の一覧が出る。 母集団となる英単語は適当に決めた。以下はその例である。
JavaScriptの正規表現を使った置換はreplaceメソッドである。 このとき、RegExp.$1などの後方参照を使うときのコツがある。 その場で後方参照を使うときには、無名関数を使うのである。
str = "kondowa634toyariaunode8940niwa4649tsutaetekure"
str1 = str.replace(/(\d+)/g, function(){return " (" + RegExp.$1 + ") "});
//=> kondowa (634) toyariaunode (8940) niwa (4649) tsutaetekure
replace を使うまでもない文字列の操作では、substring や substr, slice がある。 どれも s で始まる関数でこんがらがるので、整理する。 以下、エスペラントの単語 malsanulo (病人)をもとに、説明していく。 この言葉は、sana (健康な) (語幹 san と形容詞を表す語尾 a の組み合わせ)から派生したことばで、 反対を意味する mal が接頭辞となって malsana で「病気の」という意味になる。 さらに、人を表す接尾辞 ul を末尾に、そして名詞を表す o を末尾につけて、 malsanulo ができあがる。これは病人を表す。
substring(m) または、substring(m, n) とする。 引数 m, n はどちらも整数である。 引数が 1 つ、すなわち m のみの場合、その引数 m が負でない整数であれば先頭の数字から数えて(先頭は 0 で数える) m 番目から末尾までの文字列を返す。m が 負の整数であれば、m = 0 とみなされる。 引数が 2 つの場合は、先頭から m 番目から 先頭から n - 1 個めまでの文字をとる。
"malsanulo".substring(0) =
"malsanulo".substring(3) = (反対を表す mal が取れたので、sanulo は「健康な人」を表す)。
"malsanulo".substring(-3) =
"malsanulo".substring(3, 6) = ( san は「健康な」という形容詞 sana の語幹)。
slice(m) または slice(m, n) である。 引数 m, n はどちらも整数である。 引数が 1 つ、すなわち m のみの場合、その引数 m が負でない整数であれば先頭頭の数字から数えて(先頭は 0) m 番目から末尾までの文字列を返す。m が負の整数であれば、後ろから数える。-1 ならば末尾の数字から、-2 なら 末尾から 2 番目の数字から数える。 引数が 2 つの場合は、先頭から m 番目から 先頭から n 番目 の文字をとる。n に関しても負の数を許す。 数え方は m と同様。
"malsanulo".slice(0) =
"malsanulo".slice(3) = (この場合は、メソッド substring(3) と同じ)。
"malsanulo".slice(-3) = (この場合は、メソッド substring(-3) と異なり、後ろから数えて3文字分を取る。 ulo は「人」)。
"malsanulo".slice(-3, -1) = (後ろから数えて3文字分から後ろから数えて1文字を落とす。ul は人を意味する接尾辞)。
substr(m) または、substr(m, n) である。 引数 m, n はどちらも整数である。 引数が 1 つ、すなわち m のみの場合、その引数 m が負でない整数であれば先頭頭の数字から数えて(先頭は 0) m 番目から末尾までの文字列を返す。m が負の整数であれば、後ろから数える。-1 ならば末尾の数字から、-2 なら 末尾から 2 番目の数字から数える。 引数が 2 つの場合は、m 番目から n 個の文字をとる。
"malsanulo".substr(0) =
"malsanulo".substr(3) =
"malsanulo".slice(-3) =
"malsanulo".substr(3, 3) = (sanulo から先頭の 3 文字を取る)。
まりんきょ学問所 > JavaScript 手習い > 正規表現に挑戦