RubyとJavaScriptにおける正規表現
正規表現系のメソッドがいつもごちゃごちゃになって、その場その場でリファレンスを見ているので、このタイミングでまとめてみます。
正規表現に対するメソッド体系
用途 | Ruby | JavaScript |
---|---|---|
正規表現のパターンにマッチした最初の部分を文字列に置換する | String#sub | String.prototype.replace |
正規表現のパターンにマッチしたすべての部分を文字列に置換する | String#gsub | String.prototype.replaceAll |
正規表現のパターンにマッチする文字のインデックスを返す | String#=~ | String.prototype.search |
正規表現のパターンにマッチする文字列を返す | String#match or Regexp#match | String.prototype.match |
正規表現のパターンにマッチするかどうかをbooleanで返す | String#match? or Regexp#match? | RegExp.prototype.test |
正規表現のパターンにマッチする文字列すべてを返す | String#scan | String.prototype.matchAll |
ちょっと試してみた
正規表現のパターンにマッチした最初の部分を文字列に置換する
'ikuma-t, yamada-d, tanaka-p, okurag, tarou-d'.sub(/-/, '~')#=> "ikuma~t, yamada-d, tanaka-p, okurag, tarou-d"
'ikuma-t, yamada-d, tanaka-p, okurag, tarou-d'.replace(/-/, '~')// 'ikuma~t, yamada-d, tanaka-p, okurag, tarou-d'
正規表現のパターンにマッチしたすべての部分を文字列に置換する
'ikuma-t, yamada-d, tanaka-p, okurag, tarou-d'.gsub(/-/, '~')#=> "ikuma~t, yamada~d, tanaka~p, okurag, tarou~d"
'ikuma-t, yamada-d, tanaka-p, okurag, tarou-d'.replaceAll(/-/g, '~')// 'ikuma~t, yamada~d, tanaka~p, okurag, tarou~d'
JavaScriptのString.prototype.replaceAllを使用する際には、グローバルフラグを持つRegExpオブジェクトを指定する必要がある。
正規表現のパターンにマッチする文字のインデックスを返す
'ikuma-t' =~ /.*-./# => 0
'ikumat' =~ /.*-./# => nil
'ikuma-t'.search(/.*-./)// 0
'ikumat'.search(/.*-./)// -1
正規表現のパターンにマッチする文字列を返す
# Regexp#matchの方を使っています/.*-./.match('ikuma-t')# => #<MatchData "ikuma-t">
/.*-./.match('ikumat')# => nil
'ikuma-t'.match(/.*-./)// [ 'ikuma-t', index: 0, input: 'ikuma-t', groups: undefined ]
'ikumat'.match(/.*-./)// null
正規表現のパターンにマッチするかどうかをbooleanで返す
/.*-./.match?('ikuma-t')# => true
/.*-./.match?('ikumat')# => false
/.*-./.test('ikuma-t')// true
/.*-./.test('ikumat')// false
正規表現のパターンにマッチする文字列すべてを返す正規表現のパターンにマッチする文字列すべてを返す
'ikuma-t'.scan(/[aiueo]/)# => ["i", "u", "a"]
['ikuma-t'.matchAll(/[aiueo]/g)]// [ [ 'i', index: 0, input: 'ikuma-t', groups: undefined ], [ 'u', index: 2, input: 'ikuma-t', groups: undefined ], [ 'a', index: 4, input: 'ikuma-t', groups: undefined ] ]
JavaScriptのString.prototype.matchAllを使用する際には、グローバルフラグを持つRegExpオブジェクトを指定する必要がある。