正規表現に挑戦

作成日:2002-12-03
最終更新日:

部分一致、前方一致、後方一致

英語を覚えるために、正規表現を用いた単語リストを出してみることにした。 正規表現の欄に正規表現を入れると、その正規表現に合致した単語の一覧が出る。 母集団となる英単語は適当に決めた。以下はその例である。

  1. 正規表現の欄にmit と入れ「検索」ボタンをクリックすると、 mitigate, remit, smite, summit,vomit が出る。
  2. 正規表現の欄に^mit と入れ「検索」ボタンをクリックすると、mitigate が出る。
  3. 正規表現の欄にmit$ と入れ「検索」ボタンをクリックすると、remit, summit,vomit が出る。

正規表現:

一致の後方参照

JavaScriptの正規表現を使った置換はreplaceメソッドである。 このとき、RegExp.$1などの後方参照を使うときのコツがある。 その場で後方参照を使うときには、無名関数を使うのである。

str = "kondowa634toyariaunode8940niwa4649tsutaetekure"
str1 = str.replace(/(\d+)/g, function(){return " (" + RegExp.$1 + ") "});
//=> kondowa (634) toyariaunode (8940) niwa (4649) tsutaetekure

substring, substr, slice

replace を使うまでもない文字列の操作では、substring や substr, slice がある。 どれも s で始まる関数でこんがらがるので、整理する。 以下、エスペラントの単語 malsanulo (病人)をもとに、説明していく。 この言葉は、sana (健康な) (語幹 san と形容詞を表す語尾 a の組み合わせ)から派生したことばで、 反対を意味する mal が接頭辞となって malsana で「病気の」という意味になる。 さらに、人を表す接尾辞 ul を末尾に、そして名詞を表す o を末尾につけて、 malsanulo ができあがる。これは病人を表す。

substring

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

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

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 手習い > 正規表現に挑戦


MARUYAMA Satosi